JS传递中文备忘

js在发送url请求带中文时会有乱码问题:
例如  var url="....do?method=init&name='中文'";
处理的方法是  对中文进行二次转码   encodeURI(encodeURI('中文')) 而我们通常只做一次转码发现还是不对。只能叹没有办法。
在接收方进行一次解码:
java.net.URLDecoder  static String decode(String s, String enc)
s 为接收的字符串   enc 为要转的编码  utf-8 等

http://wjt276.iteye.com/blog/455111 写道
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。
如果不使用转义字符,这些编码就会当URL中定义的特殊字符处理。


下表中列出了一些URL特殊符号及编码 十六进制值
1.+ URL 中+号表示空格 %2B

2.空格 URL中的空格可以用+号或者编码 %20

3./ 分隔目录和子目录 %2F

4.? 分隔实际的 URL 和参数 %3F

5.% 指定特殊字符 %25

6.# 表示书签 %23

7.& URL 中指定的参数间的分隔符 %26

8.= URL 中指定参数的值 %3D

 其他信息:

js 对文字进行编码涉及 3 个函数的区别 :      
     escape() 方法采用 ISO Latin 字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非 ASCII 字符都将被转化成 %xx 格式的字符编码( xx 等于该字符在字符集表里面的编码的 16 进制数字)。比如,空格符对应的编码是 %20 unescape 方法与此相反。不会被此方法编码的字符: @ * / +. 总体上来说 escape 不编码字符有 69 个: * + - . / @ _ 0-9 a-z A-Z

        encodeURI() 方法:把 URI 字符串采用 UTF-8 编码格式转化成 escape 格式的字符串。 encodeURI 不编码字符有 82 个: ! # $ & ' ( ) * + , - . / : ; = ? @ _ ~ 0-9 a-z A-Z

     encodeURIComponent() 方法:把 URI 字符串采用 UTF-8 编码格式转化成 escape 格式的字符串。与 encodeURI() 相比, 这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了 URI 的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后 URL 将显示错误。 不会被此方法编码的字符: ! ' ( ) * - . _ ~ 0-9 a-z A-Z

         因此,对于中文字符串来说,如果不希望把字符串编码格式转化成 UTF-8格式的(比如原页面和目标页面的 charset是一致的时候),只需要使用 escape。如果你的页面是 GB2312或者其他的编码,而接受参数的页面是 UTF-8编码的,就要采用 encodeURI或者 encodeURIComponent

 

在服务器端得到传入的参数后,可以用如下方法解码出来:

用java.net.URLDecoder类的decode(String s, String enc)方法,第一个参数是要解码的字符串,第二个参数指定解码时用的编码。

你可能感兴趣的:(.net,Blog)