关闭

TOMCAT中文乱码问题的解决方案

1376人阅读 评论(0) 收藏 举报
分类:

本人在使用AliPay的支付接口时遇到notify_url正常,但是return_url乱码,后查询到notify使用的是POST请求,而return_url使用的是GET请求,针对这个情况使用useBodyEncodingForURI="true"解决问题。

注意:也可通过阿里支付的demo代码valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");来处理,但是个人感觉不是很好,这个只是阿里为了方便大家而提供的但是如果同时有GET和POST请求验证的时候可能会出错。

Tomcat解决请求乱码可以使用URIEncoding和useBodyEncodingForURI.下面是两个参数的具体说明,参见ApacheTomcat官方手册。


URIEncoding This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.
useBodyEncodingForURI This specifies if the encoding specified in contentType should be used for URI query parameters, instead of using the URIEncoding. This setting is present for compatibility with Tomcat 4.1.x, where the encoding specified in the contentType, or explicitly set using Request.setCharacterEncoding method was also used for the parameters from the URL. The default value is false.
http://tomcat.apache.org/tomcat-7.0-doc/config/http.html


在上图可以看到,中文乱码容易出现在两个地方。一个是所请求的资源名称为中文,一个是查询参数的内容包括中文。
更复杂的是,不同的浏览器可能使用两种编码分别处理URL和查询参数。
useBodyEncodingForURI只是针对图上"author=君山"的查询参数(QueryString)有效,他的设置对于URL和URI无效。
下面以Windows环境为例,分别测试谷歌、火狐和IE浏览器请求中文资源和中文参数的乱码情况。

下表是三种浏览器的编码情况。其中IE的URI编码可以调整为UTF8。
  默认URI编码 默认查询参数编码
谷歌 UTF8 UTF8
火狐 UTF8 GBK
IE GBK GBK

1.Tomcat的URIEncoding设置为UTF8
谷歌正常
火狐可以请求到资源,但是查询参数的中文为乱码
IE不能请求到资源

测试代码如下

测试结果如下:


2.将IE的URI编码设置为UTF8,开启useBodyEncodingForURI,并设置request的字符集为GBK。

针对URI和查询参数使用两种编码的情况,可以使用useBodyEncodingForURI。他会根据http body设置的字符集解码。
将IE设置为"发送UTF8的URL"之后,三种浏览器都使用UTF8作为URI编码,但是IE和火狐的查询参数使用GBK编码,而谷歌的查询参数使用UTF8编码。所以在这种情况下,IE和火狐的访问都是正常的,而使用谷歌浏览器,可以访问资源,但是中文的查询参数则是乱码。

测试结果:


实验得出的结论是
1.URIEncoding和useBodyEncodingForURI都可以处理中文乱码的问题
2.浏览器对于URI和查询参数可能使用两种不同的编码方式,这种情况下,可以使用useBodyEncodingForURI调整查询参数的编码。

参考:
http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Tomcat解决中文乱码的几种方式

一、对Tomcat_HOME/conf/server.xml文件进行配置(本机的完整目录为D:/Users/Administrator/Tomcat/apache-tomcat-7.0.54/conf...
  • lengjinghk
  • lengjinghk
  • 2016-07-18 06:41
  • 36903

tomcat+SSH中遇到中文乱码的解决方法

最近开始又转向J2EE的开发。很久没用,重新熟悉。 本地环境ubuntu 12.13,mysql5.x,tomcat7.x,struts2.3.15.x,spring3.1.0,hibern...
  • richerg85
  • richerg85
  • 2014-11-16 13:15
  • 5878

tomcat解决get请求乱码的方法(第三个似乎不好用)

由于在JSP中使用了GBK作用页面的编码,那么提交的中文信息自然也会被按着GBK进行编码,为%xx格式的GBK编码。      要解决这个问题可以说是方法多多。最简单的就是使用request.set...
  • happyrabbit456
  • happyrabbit456
  • 2016-04-02 23:30
  • 1327

tomcat配置及中文乱码问题的解决方案

本文要解决的问题: 掌握tomcat的配置,同时解决使用过程中一系列的乱码问题。 tomcat中文乱码问题 一、Java中文问题的由来   Java的内核和class文件是...
  • sbq63683210
  • sbq63683210
  • 2016-07-07 12:36
  • 6508

Tomcat及MySQL中文乱码问题解决方案总览

Tomcat和MySQL组合作为Web开发的基础,已经很流行了,但其中的乱码问题让人烦心,经过一段时间的学习和实践,现在有了一些方法消除乱码。 我用的平台是Tomcat 5.5.12+MySQL 4...
  • budapest
  • budapest
  • 2013-10-20 20:17
  • 1244

Jsp前台提交中文乱码问题解决方案(Tomcat项目运行时,加载jar包或类文件的顺序)

众所周知,在我们javaWeb下项目中常常会实现前后台交互,而前后台交互最常见的问题就是中文乱码问题,下面我总结出四种中文乱码解决方案:前提:前台页面必须以post方式提交中文 —因为post会设置h...
  • wangjian_an
  • wangjian_an
  • 2016-07-17 23:34
  • 881

tomcat get提交中文乱码解决方案

  • 2018-01-03 17:14
  • 458B
  • 下载

java中MySQL中文乱码问题解决方案

  • 2014-04-14 16:54
  • 28KB
  • 下载

jsp,java中文乱码问题另类解决方案,jni加密、解密编码

  • 2016-06-15 13:40
  • 41KB
  • 下载

Mysql中文乱码问题完美解决方案.doc

  • 2012-07-24 09:28
  • 44KB
  • 下载
    个人资料
    • 访问:124044次
    • 积分:1743
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:28篇
    • 译文:0篇
    • 评论:17条
    最新评论