• 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");
    c. 可以用过滤器的方式来解决, Tomcat 已经带了一个现成的:
    apache-tomcat-5.5.23\webapps\jsp-examples\WEB-INF\classes\filters\SetCharacter
    EncodingFilter.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), 就不会出现乱码问题.


     

  • 相关阅读:
    SQL语句-用sql语句得到表中所有字段的名字
    SQL语句-判断数据库中是否有这张表
    Java开发-创建第一个项目hello world
    MFC-一个很简单的程序最小化到托盘,带右键菜单带图标
    Everything SDK-基于名称快速定位文件和文件夹。
    NX二次开发-基于PycharmIDE的NXOpen Python开发环境配置
    手动局域网搭建FTP服务器
    FreeCAD二次开发-基于控制台模式FC外部开发
    FreeCAD二次开发-基于PyQT对话框与FC交互的开发
    实例开发-NX二次开发手动截图工具
  • 原文地址:https://www.cnblogs.com/Snowfun/p/1911574.html
Copyright © 2020-2023  润新知