Tomcat乱码问题? 400 报错
都说程序员的一生都会被乱码困扰。
在java开发时,遇到过很多次的乱码情况,最终找到了一个比较好的解决方案:修改spring源代码,但是这个方法只针对@ResponseBody返回的数据有效。
对于spring请求乱码,我一直是修改Tomcat的配置文件,不过今天突然想到了:当用户请求到达spring处理之前,Tomcat会默认进行一个编码处理:
URIEncoding :This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.
当我知道过后,马上把Tomcat的配置文件注释掉,然后手动进行解码:
System.out.println(new String((name).getBytes(),"GBK")); System.out.println(new String((name).getBytes(),"GB2312")); System.out.println(new String((name).getBytes(),"UTF-8")); System.out.println(new String((name).getBytes(),"ISO-8859-1"));
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
原来你是问这个....
改成(name).getBytes("ISO-8859-1") 试试
######回复 @yumemor : getBytes是编码,new String是解码,你这么理解就对了,如果没有参数则是默认编码(一般是UTF-8)######不好意思,经过我刚刚测试,这种方式能解决 ,能告诉我为什么么? new String((name).getBytes(),"ISO-8859-1") new String(name.getBytes("ISO-8859-1")) 有什么区别呢?######不行的哈,基本所有编码都试过了,不行,上面已经说了######倒是可以考虑用过滤器来解决乱码,post的直接设置编码,get的写一个继承 HttpServletRequestWrapper的类######post用过滤器即可
get请求修改tomcat的server.xml中的<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 加上URIEncoding="编码" 当然这个编码应该跟你客户端编码一致
######其实你们都误解了我说的意思,请大家认真看题目好吗?
为什么手动解码和配置文件还是不一样呢? 都是转换成UTF-8 。
######1. 你看下System.out.print(Charset.defaultCharset());值是啥。
2. System.out.println(new String(name.getBytes("ISO-8859-1"), "ISO-8859-1"));看看能不能行。
3. 我个人觉得,配置文件和自己解码肯定都是可以解决的。
######回复 @yumemor : 其实可以参看URLEncoder,URLDecoder两个类的编码解码的方法,编码的方法调用了getBytes,解码的调用了new String,如果你页面上编码是utf-8,则相当于调用了URLEncoder.encode(str, "UTF-8")这个方法,但tomcat默认是调用URLDecoder.decode(str_utf8, "ISO-8859-1"),所以你可以理解整个过程为new String(str.getBytes("utf-8"),"ISO-8859-1");所以会出现乱码,所以你只要用new String(str.getBytes("ISO-8859-1"),"utf-8");就可以转回来,如果java端默认编码为utf-8,new String(str.getBytes("ISO-8859-1"));也是同样的效果######回复 @maradona : 感谢!###### @yumemor 具体可以参照一下 http://blog.csdn.net/chenssy/article/details/42913511 或许对你有帮助,俺发现对这个理解又透彻了一点点