非常细节:关于Servlet中文编码的一个问题
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 。
这个问题也是导致前两天我更新程序时导致乱码的根本原因。