HTTP请求中的中文乱码处理

请求中中文乱码造成的原因?

Tomcat接受请求的时候,默认使用ISO-8859-1编码。该编码只占一个字节,而中文占两个字节,所以不支持中文。

乱码解决方法?

对乱码使用ISO-8859-1解码,转成byte数组,然后对byte数组重新使用UTF-8编码。(不管是POST请求还是GET请求都行),似乎这种方法对get请求不起作用。

byte[] tomcatname=req.getParameter("name").getBytes("ISO-8859-1");
String username=new String(tomcatname,"UTF-8");

其他方法?

POST方式:

req.setCharacterEncoding("UTF-8");

该种方式必须在获取第一个参数之前设置,且只对POST请求有效。


GET方式:

重新设置Tomcat的编码方式,修改Tomcat的配置文件server.xml,修改

<Connector port="80" protocoll="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>

(默认URIEncoding="ISO-8859-1")为

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

但是该方式只对GET方式有效,不建议用。


所以总结起来,

post请求参数有中文,用

req.setCharacterEncoding("UTF-8");

或者

byte[] tomcatname=req.getParameter("name").getBytes("ISO-8859-1");
String username=new String(tomcatname,"UTF-8");

而get请求要改tomcat配置文件,相对于改Tomcat编码。

所以说请求要传中文尽量用POST方式。

发布了56 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40726316/article/details/99699747