Tomcat JSP Web开发中的乱码问题小结

1、静态页面的乱码问题
文件的编码和浏览器要显示的编码不一致。
1)检查文件原始的编码,可以用记事本打开,然后选择另存为来看;
2)给当前页面加入一个指令来建议浏览器用指定的编码来显示文件字符内容。
<meta http-equiv="content-type" content="text/html; charset=GBK">
3)如果系统是英文XP,没装东亚字符集支持,也会显示乱码。
2、JSP页面的乱码问题
1)page指令有个pageEncoding="GBK"这个会指定当前页面保存的编码,如果写成ISO8859-1就不能保存汉字;
2)page指令的contentType="text/html;charset=ISO8859-1"也会像静态页面一样让浏览器来优先选择一种编码。如果JSP乱码的话,一般就显示成?,而且不管你给浏览器选什样的编码,它都不能正确显示。
3、表单提交的乱码问题(Tomcat特有)
1)POST的乱码
a、首先浏览器提交表单的编码是根据表单所在页面来决定的, 而不是根据提交后的JSP页面的编码来决定的。把所有的页面的编码都设置成一样的,例如GBK。
b、处理方式就是在获取参数之前设置编码:request.setCharacterEncoding("GBK");response.setContentType("text/html;charset=GBK");
c、可以用过滤器的方式来解决, Tomcat已经带了一个现成的:
apache-tomcat-5.5.23\webapps\jsp-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.java
web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2)GET方式的乱码
用setCharacterEncoding()不能解决,TOMCAT的一个BUG,GET方式传送的表单参数总是用的ISO8859-1 编码。我们要把它转成GBK方式。
String username = request.getParameter("username");
System.out.println(username);
// 转码,先取得原始的二进制字节数组
byte[] data = username.getBytes("ISO8859-1");
// 根据新的字符集再构造新的字符串
username = new String(data, "GBK");
小结:
所有的页面(除了最后的 GET 的乱码问题)都用统一的编码(GBK或者UTF-8),就不会出现乱码问题.
4. 用过滤器来一次编码彻底解决表单参数的乱码问题。

posted on 2010-08-17 09:03  基斯盐  阅读(286)  评论(0编辑  收藏  举报

导航