• java web乱码及解决方法


    一、中文乱码说明

    在Java Web项目中,由于pageEncoding、contentType和charset等编码属性的设置不恰当往往导致显示中文字符会出现乱码问题。例如,在Java Web项目的代码采用UTF-8进行编码,而在浏览器使用ISO-8859-1进行编码,因此会产生中文乱码问题。

    二、相关知识

      1.JSP中pageEncoding、contentType以及contentType的charset的理解与区别:

    1)pageEncoing:设置JSP源文件本身和响应正文中的字符集编码;

    2)contentType:设置JSP原文建和响应正文中的字符集编码以及MIME类型;

    3)charset:设置服务器发送给客服端时的内容的字符集编码。

      2.在Java Web项目中,通常情况下,产生中文乱码有三种情况:

    第一种情况:调用JSP页面时产生中文乱码;

    第二种情况:调用Servlet页面时产生中文乱码;

    第三种情况:通过post请求传递包含中文字符的表单时出现中文乱码。

      3.几种常见的编码格式:

    1)ISO-8859-1:属于单字节编码,最多能表示字符范围为0-255,应用于英文系列;

    2)GB2312/GBK:是汉字的国标码,专门用来表示汉字,是双字节编码,而英文字母和ISO-8859-1一致。其中GBK编码能够用来同时表示繁体字和简体字,而GB2312只能表示简体字,GBK是兼容GB2312编码;

    3)UTF-8:是一种用以解决国际上字符的多字节编码,它对英文使用一个字节,对中文使用三个字节进行编码,是国际上比较通用的字符编码。

    解决方案

         解决思路:根本上就是使编码保持一致,即:

          1、JSP的字符编码格式。(JSP页面的头部添加<%@page contentType="text/html"pageEncoding="UTF-8"%>或者将pageEncoding中的值改为UTF-8)

          2、Request的字符编码格式。

               1)(request.setCharacterEncoding( UTF-8));

               2)spring的字符集过滤器org.springframework.web.filter.CharacterEncodingFilter配置,如:     

      <filter>
        <description>字符集过滤器</description>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <description>字符集编码</description>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter>

    但以上方法只对post 有效,而当HTTP请求以GET方式发出时,请求参数位于请求头的URI中。过滤器只对请求体中的内容编码,而请求头不编码,Tomcat对于GET请求会使用iso-8859-1编码(tomcat默认编码)。

    get请求

    1、修改tomcat的编码

        <Connector port="9300" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443"   URIEncoding="UTF-8" />

     2、但有时需要根据文档调用第三方接口。这时可以采用。

    new String(key.getBytes("iso8859-1"), "utf-8");

     3、在客户端使用 URLEncoder.encode(“中文”,”UTF-8”)对中文参数进行编码,在服务器端需要进行解码this.setName(java.net.URLDecoder.decode(name, “UTF-8”)); 

         

     

  • 相关阅读:
    C#学习笔记-代理模式
    SqlDbx连接oracle
    C# 连接oracle,用32位client和64位Client,可能导致结果不同
    PHP&Java 调用C#的WCF
    DevExpress GridControl 控件二表连动
    SSAS 非重复计数
    Corn 表达式
    C# 实现Tree,包含parentId和children
    jsfiddle.net上的记录
    【慕课网实战】Spark Streaming实时流处理项目实战笔记十二之铭文升级版
  • 原文地址:https://www.cnblogs.com/magic101/p/8798150.html
Copyright © 2020-2023  润新知