GET请求中中文乱码的解决

GET请求中的乱码原理解析和解决方案

《深入分析javaweb技术内幕》第三章

web应用中浏览器与服务端的编码和解码


浏览器会自动对url进行编码,不同浏览器用的编码集不同,可进行设置。

tomcat默认是用iso-8859-1对uri和get参数进行解码,所以如果这个过来的get参数是用的utf-8编码的,到了服务器端tomcat用iso8859-1解码就会出现乱码。

好像tomcat8默认用的是utf8,get请求中文不会乱码。

修改tomcat配置的解决方法:
修改配置文件server.xml ,用utf-8对uri解码。
tomcat对get参数解码用的编码集,要么是Header的ContentType定义的charset,要么是默认的ISO-8859-1。
设置useBodyEncodingForURI=true使tomcat使用ContentType的charset。这个属性是表示对get参数使用BodyEncoding进行解码而不是对整个uri。

不改tomcat配置:

  1. 在java中用iso8859-1解码后用utf-8编码
    key = new String(key.getBytes("iso8859-1"), "utf-8");

  2. 可以前端两次编码uri,到服务端两次解码uri,tomcat一次(ISO-8859-1),手动一次(utf-8)。
    因为对英文字符来说UTF-8编码和ISO-8859-1编码的效果相同。
    但是如果有特殊字符,就没法得到正确的结果。

ajax发请求时如果用encodeURI()用utf-8编码,浏览器会不会干涉再编码一次?


另外,
在java端处理url编解码有两个类,URLEncoder和URLDecoder。这两个类可以将所有“%”加utf-8码值用utf-8解码,从而得到原始的字符。

你可能感兴趣的:(GET请求中中文乱码的解决)