客户端..服务器乱码问题

乱码问题由来:客户端和服务器编码格式不一致,用comcat的时候是由comcat容器造成的。

解决办法:
一、设置编码格式
get提交的:
容器对get统一采用ISO8859-1
String value = request.getParameter(name);
value = new String(value.getBytes("ISO8859-1"),"UTF-8");
采取下边的post设置响应字符集的编码格式无效:
因为这种方式设置的是消息体的格式,get方式提交的(没有指定post提交都是get提交),没有在消息体里边,所以设置无效

post提交的:
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");

二、写请求响应过滤器
把上边的设置为过滤器,所有的请求响应都要经过此过滤器


三、特殊
在测试过程中,遇到的一种乱码问题,图片格式请求的的时候,显示出来的是中文路径也是中文,但是在请求的过程中浏览器在使用get传输参数时,将参数中的中文转换成url格式,也就是使用urlEncode和urlDecode来传输,使用这种方式就是把中文转换成以%开头的编码在url中传输。

设置无效原因:get方式提交,设置的是value的编码格式,没有找到方法设置请求的编码格式。

如下边的请求,数据库和页面的图片路径都是中文,但是在请求地址的时候,转成了%开头的格式,找不到了。


<img alt="头像" src="http://localhost:8080/regist/upload/Java默认打开方式设置.jpg">

Request URL:http://localhost:8080/regist/upload/Java%E9%BB%98%E8%AE%A4%E6%89%93%E5%BC%80%E6%96%B9%E5%BC%8F%E8%AE%BE%E7%BD%AE.jpg
Request Method:GET
Status Code:404 Not Found
Remote Address:127.0.0.1:8080

解决办法:配置文件里加入URIEncoding="UTF-8"
如果没有设置字符集,这里也会正常的显示,但是这种方式有个缺点,必须改comcat的配置文件,如果移植代码,比人的可能没有改,或许别人限制更改,所以还是要加上过滤器。

在tomcat的/conf/server.xml文件中,找到以下这一行。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
这行的意思也就是使用8080端口来接收html的请求。
在这里可以加几个参数来配置不同的效果。

URIEncoding="UTF-8" 设置url传输时对url内容的编码格式
compression="on" 打开压缩功能 
compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB
noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml" 压缩类型

☆对于要解决乱码来说,改成以下就行
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

添加后效果如下:
Request URL:http://localhost:8080/regist/upload/Java%E9%BB%98%E8%AE%A4%E6%89%93%E5%BC%80%E6%96%B9%E5%BC%8F%E8%AE%BE%E7%BD%AE.jpg
Request Method:GET
Status Code:200 OK
Remote Address:127.0.0.1:8080

显示正常了,在浏览器端敲入带百分号的地址,下边显示有图片了,然后浏览器的地址成功后变成:http://localhost:8080/regist/upload/Java默认打开方式设置.jpg

原文地址:https://www.cnblogs.com/chenyuanqiu2008/p/5485237.html