• 解决Tomcat请求中文乱码的问题


    在 Tomcat 中处理带中文参数的get请求时,照着以往的做法,发现还是乱码,这让我丈二和尚摸不着头脑,结果一查询才发现,我所使用的 Tomcat8 已经对get方式中文乱码进行了处理。Tomcat8 中终于不用为了编码而折腾了。

    原因

    在Tomcat中,所有字符默认是按ISO-8859-1的编码格式来编码的,这是欧洲使用的一种字符编码格式。在浏览器发起http请求时,将请求的url以及参数按服务器指定的UTF-8编码后发送到Tomcat,这时Tomcat并不知道发送来的字符是按什么编码的,使用默认的ISO-8859-1格式来解析字符,导致中文乱码。Tomcat Http请求中文乱码

    解决

    Tomcat8

    高版本 Tomcat 中,Tomcat8 对 GET 的默认解码为 UTF-8。只要没有对 server.xml Connector 元素进行改动(对编码部分进行参数配置),那么,Tomcat8 对 GET 的默认解码则为 UTF-8。也就不会乱码了。

    Tomcat7 及以下

    Tomcat7 及以下版本,GET 方式提交的参数编码,只支持 ISO8859-1 编码。因此,有三个解决中文参数乱码的方法: get方式传值中文乱码

    1. 在后台转换编码,如下:

      String bname = request.getParameter("bname"); 
      bname = new String(bname .getBytes("iso8859-1"),"utf-8"); 

      当然,前提是你页面编码就是 UTF-8。如果是 GBK,那上面那句代码后面就改成 GBK。

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

    3. 修改tomcat的server.xml文件

      <Connector executor="tomcatThreadPool"
             port="8080" protocol="HTTP/1.1"
             connectionTimeout="20000"
             redirectPort="8443"
             <!-- 添加参数 -->
             URIEncoding="GBK" 
             useBodyEncodingForURI="true"/>

      同样的,URIEncoding 需要与页面编码保持一致。

      URIEncoding 是请求的 URL 中字符的编码,会将 URL 中 %xx 这样的 URL 按这里指定的编码格式去解码,如果不指定则会使用默认的 ISO-8859-1 。

      useBodyEncodingForURI=”true”,该属性是使用 body 体的编码格式去解析 URL 中的 %xx。

    总结

    Tomcat8 好。

  • 相关阅读:
    C#集合类型——Array、ArrayList、List 之浅谈
    C#反射(二)
    ASP.Net内置对象之网页之间传参(二)
    ASP.Net内置对象之网页之间传参(一)
    MyEclipse中设置智能提示
    常用Java片段
    ue中替换行
    正确的计算耗时
    JAVA之GUI编程ACTION事件
    JAVA之GUI编程窗体事件
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12925977.html
Copyright © 2020-2023  润新知