request.setCharacterEncoding("UTF-8");
上面这个方法,相信所有用Java编写web应用的时候都会用过。但是你知道这个方法使用上有什么注意事项吗?
你必须让这个方法在所有 getParameter 和 getParameterXxxx 之前调用,如果你的代码有如下行为:
String id = request.getParameter("id");
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
假设这个name是一个中文参数,那么在IE浏览器下,name值就是乱码,而 FireFox 正常。
我在 Tomcat 和 Resin 下都测试过这个问题,一样的效果。
因此,你必须保证 setCharacterEncoding 在获取参数之前被调用,否则无效。
至于为什么 FireFox 是正常的,而 IE 则不行呢?
你不妨跟踪一下 request.getCharacterEncoding 这个方法的返回值,在 FireFox 下返回 utf-8 ,而IE返回的是 null 。
这个问题也是导致前两天我更新程序时导致乱码的根本原因。
最好的办法是在Connector配置中加上URIEncodeing="utf-8"参数
######
最好的办法是在Connector配置中加上URIEncodeing="utf-8"参数
这个参数只是tomcat的吧,那如果我要用resin或jetty怎办???
最好还是程序层面做,适应所有应用服务器,
最后红薯大哥是怎解决的呢????先得到request 的 encoding??如果为空就给他一个默认值?
######最好的办法是在Connector配置中加上URIEncodeing="utf-8"参数
这个参数只影响 GET 方式的中文参数,对 POST 方式是无效的。
######最好的办法是在Connector配置中加上URIEncodeing="utf-8"参数
这个参数只影响 GET 方式的中文参数,对 POST 方式是无效的。
同意 红薯的 说法 , URIEncodeing 的配置只对 GET请求有效。通常写一个单独的过滤器来专门处理请求编码的问题。
######文档上写的很清楚了,看了就不会错
public void setCharacterEncoding(java.lang.String env) throws java.io.UnsupportedEncodingException
a
-
String
containing the name of the chararacter encoding.
resin:
<web-app-default>
<character-encoding>UTF-8</character-encoding>
</web-app-default>
jetty应该也有类似的设置
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。