JAVA/JS中中文编码转换

Posted yifansj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA/JS中中文编码转换相关的知识,希望对你有一定的参考价值。

一、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中中文编码转换的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 几种编码转换成汉字

在代码片段中包含类型转换

markdown 打字稿...编码说明,提示,作弊,指南,代码片段和教程文章

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

结合两个代码片段?将用户输入的 Youtube url 转换为嵌入 url,然后将 iframe src 替换为转换后的 url

需要示例代码片段帮助