java,js的编码解码问题

本文详细解析了在Java和JavaScript中进行前后台转码的问题,包括使用URLEncoder和URLDecoder进行编码与解码的方法,以及在两种语言间的混合使用场景。同时提供了编码与解码的注意事项和对比分析,帮助开发者避免常见的编码错误。
摘要由CSDN通过智能技术生成

今天是2015年10月11日今天遇到的问题是前后台转码问题,找了好多的资料,现在总结一下,以备后用:
在java中
       1:要想解码,首先需要编码。在java中有java.net.URLEncoder是 HTML 格式解码的实用工具类。里面有publicstatic String encode(String s, String enc)方法
                                   参数:
                                   s- 要转换的String。
                                   enc- 所支持的字符编码名称。 
          使用指定的编码机制将字符串转换为application/x-www-form-urlencoded 格式。该方法使用提供的编码机制获取不安全字符的字节。 


       2:开始解码。在java中有java.net.URLDecoder是 HTML 格式解码的实用工具类,里面有publicstatic String decode(String s,String enc)方法
                                   参数:
                                   s- 要解码的String
                                   enc- 所支持的字符编码的名称。 
          使用指定的编码机制对application/x-www-form-urlencoded 字符串解码。给定的编码用于确定任何"%xy" 格式的连续序列表示的字符。
      
       这里使用编码和解码要注意一点,解码需要解码两次,下面这位作者的文章给出原因,写的非常棒!
       http://m.blog.csdn.net/blog/taotaotaotao910429/8626421



在js中
       原文地址http://www.cnblogs.com/andiki/articles/1399720.html

一、定义和用法

encodeURI() 函数可把字符串作为 URI 进行编码。

语法

encodeURI(URIstring)

参数

描述

URIstring

必需。一个字符串,含有 URI 或其他要编码的文本。

返回值

URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

说明

该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#

提示和注释

提示:如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。

此方法的解码为decodeURI()

 

 

二、定义和用法

escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。

语法

escape(string)

参数

描述

string

必需。要被转义或编码的字符串。

返回值

已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。

说明

该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。

提示和注释

提示:可以使用 unescape() 对 escape() 编码的字符串进行解码。

注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

 

三、JavaScript encodeURIComponent() 函数

定义和用法

encodeURIComponent()函数可把字符串作为 URI 组件进行编码。

语法

encodeURIComponent(URIstring)

参数

描述

URIstring

必需。一个字符串,含有 URI 组件或其他要编码的文本。

返回值

URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

说明

该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( )。

其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

提示和注释

提示:请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。
此方法解码方式decodeURIComponent

 

 

 

3.Java和js混合

 

 

一种方式

        /*

* 在前台要先双编,在后台取在解

* js代码

* var str = "中文";

* str =encodeURI(str); 1编

* str =encodeURI(str); 2编

* java代码

* String content =request.getParameter("str");

* content =java.net.URLDecoder.decode(content, "UTF-8"); 解码

*/

二种方式

         String content = newString(request.getParameter("loginid").getBytes("ISO-8859-1"),"UTF-8");直接写;

三种方式ajax提交

js:

encodeURIComponent(encodeURIComponent(value));

java:

URLDecoder.decode(value,"UTF-8");

其它的就要看乱码情况来解决eg:过滤器

javascript中存在几种对URL字符串进行编码的方法:escape(),encodeURI(),以及encodeURIComponent()。这几种编码所起的作用各不相同。 escape() 方法:    采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。不会被此方法编码的字符: @ * /+encodeURI() 方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( )= : / ; ? + 'encodeURIComponent() 方法:    把URI 字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( ) '    因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用 escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者 encodeURIComponent。另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在javascript1.0版本就有。javascript中存在几种对URL字符串进行编码的方法:escape(),encodeURI(),以及encodeURIComponent()。这几种编码所起的作用各不相同。 escape() 方法:    采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。不会被此方法编码的字符: @ * / +encodeURI()方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + 'encodeURIComponent()方法:    把URI 字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( ) '   因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用 escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者 encodeURIComponent。另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在javascript1.0版本就有。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值