码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA/JS中中文编码转换

时间:2018-06-23 18:52:39      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:Servle   chart   nec   中文编码   timeout   情况   let   head   XML   

一、JAVA中,使用UTF-8进行编码 和 使用UTF-8的UrlEncode编码结果不同

UTF-8“君山”:君山

UTF-8/UrlEncode“君山”:%e5%90%9b%e5%b1%b1

String s = "君山";  
String xmlUTF8 = URLEncoder.encode(s, "UTF-8");//%e5%90%9b%e5%b1%b1

二、JS中,使用函数对URL编码

encodeURI() / decodeURI():将URL中除特殊字符外全部进行UTF-8编码/解码。

var a = encodeURI("Http://localhost:8080/abc/def/efg/君山&q=1;10+a‘b,cd#df");  
var b = decodeURI(a);  

三、JS中,使用函数对URL编码

encodeURIComponent() / decodeURIComponent():将URL中除特殊字符外全部进行UTF-8编码/解码,比encodeURI更加彻底字符更多。

var a = encodeURIComponent("Http://localhost:8080/abc/def/efg/君山&q=1;10+a‘b,cd#df");  
var b = decodeURIComponent(a); 

四、URL的编解码

URL的组成部分:

http://localhost:8080/examples/servlets/servlet/君山?author=君山

               PathInfo?QueryString

默认情况下,浏览器对PathInfo和QueryString编码不同(分别是UTF-8和GBK),这为服务器解码带来不小困难。

通过tomcat源码,得知对URL的URI部分进行解码的字符集是在server.xml中<Connector URIEncoding="UTF-8">中定义的,如果没有定义,默认为ISO-8859-1,所以当URL中有中文时(其中君山为PathInfo),设置一下tomcat会自动以UTF-8的形式对URI进行解码,即可通过中文RequestMapping定位Controller中的方法了。

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

以GET方式HTTP请求的QueryString和与以POST方式HTTP请求的表单参数都是作为Parameters保存的,都通过request.getParameter获取参数值,对它们的解码是在request.getParameter方法第一次调用时进行的。

QueryString本身是通过Http的Header传到服务端的,而解码字符集是Header中ContentType定义的Charset(默认IOS-8859-1),要使用ContentType中定义的编码,就要将<Connector useBodyEncodingForURI="true">,注意:它并不是对整个URI都采用BodyEncoding进行解码,而仅仅是对QueryString使用BodyEncoding解码。这时就可以传递中文参数了。

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
<!-- 仅仅是QueryString使用BodyEncoding解码 -->  

最后,可以看出URL编解码比较复杂,难以掌控,建议URL中最好不用中文。

五、POST表单的编解码

POST表单的参数传递方式:Http的Body

QueryString参数传递方式:Http的Header

表单提交时用ContentTyep的Charset编码,到服务端也是用ContentType的Chartset解码,所以一般POST表单不会出现乱码。

六、BODY的编解码

String ce = request.getCharacterEncoding(); //获取服务器解码方式,

request.getrequest.setCharacterEncoding("UTF-8");//设置服务器解码方式

 

JAVA/JS中中文编码转换

标签:Servle   chart   nec   中文编码   timeout   情况   let   head   XML   

原文地址:https://www.cnblogs.com/yifanSJ/p/9218104.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!