fossil

鸟在笼中,恨关羽不能张飞 人处世上,要八戒更须悟空
posts - 40, comments - 0, trackbacks - 0, articles - 0
  语源科技BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

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");

        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. 用过滤器来一次编码彻底解决表单参数的乱码问题

Tomcat 5/6 GBK 编码下完美解决中文表单问题的过滤器



BeanSoft 2007-10-10 18:20 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/10/151848.html

只有注册用户登录后才能发表评论。


网站导航: