Tomcat 搞定URL乱码

423 阅读1分钟

Tomcat搞定UTL乱码

基础部分

中文的默认编码是GBK(ISO-8859-1),而服务器一般需要制定编码为UTF-8。而浏览器发送请求时,默认就是ISO-8859-1编码中文的,这就会造成使用ISO-8859-1编码的汉字使用UTF-8解码时变成火星文...

一般发送Ajax请求时指定content-type的编码格式为UTF-8即可

进阶部分

如果使用的是Tomcat Web容器,在server.xml中指定<connector URIEncoding="utf-8" /> 即可强制tomcat使用utf-8(默认ISO-8859-1)对中文进行decoder,避免全局utf-8编码格式下乱码。

高阶部分

在server.xml中指定<connector useBodyEncodingForURI="true" /> 可以强制使用HTTP header中的content-type 中的charset作为解码格式,如果没有指定charset,那么默认使用ISO-8859-1进行解码。这种方式可以自定义编码格式避免query string乱码。

避坑部分

若只配置了URIEncoding="utf-8",那么query string(可以简单理解为get 请求url上跟的参数)也会被强制指定为UTF-8,并且不受http header 中的charset影响,全局使用utf-8编码则不受影响; 如果,同时配置了useBodyEncodingForURI="true",那么就要小心了,这货会强制使用http header中的字符编码格式,如果恰巧header中没有设置,并且你后台的解码格式为UTF-8,那么恭喜你乱码了!(UTF-8的解码方式不能解ISO-8859-1的编码!) 建议全局设置字符编码为UTF-8,并且只设置URIEncoding=“UTF-8”,避免多种编码格式不兼容造成的乱码现象。