Tomcat后台中文乱码分析

web应用程序在提交中文数据的时候,后台经常出现乱码现象。为了彻底分析产生原因,做了一个简单测试:

创建一个简单的java web应用程序,没有使用任何框架,部署在tomcat环境中。

使用谷歌和ie浏览器分别进行测试,测试结果如下:

BrowserMethodTomcat URIEncodinghttpServletRequestSystem.out
ChromeGET--(乱码)
ChromeGET-setCharacterEncoding("gb2312")(乱码)
ChromeGET-setCharacterEncoding("utf-8")(乱码)
ChromeGETURIEncoding="gb2312" -(乱码)
ChromeGETURIEncoding="gb2312" setCharacterEncoding("gb2312")(乱码)
ChromeGETURIEncoding="gb2312" setCharacterEncoding("utf-8")(乱码)
ChromeGETURIEncoding="utf-8" -中文正常显示
ChromeGETURIEncoding="utf-8" setCharacterEncoding("gb2312")中文正常显示
ChromeGETURIEncoding="utf-8" setCharacterEncoding("utf-8")中文正常显示
ChromePOST--(乱码)
ChromePOST-setCharacterEncoding("gb2312")(乱码)
ChromePOST-setCharacterEncoding("utf-8")中文正常显示
ChromePOSTURIEncoding="gb2312" -(乱码)
ChromePOSTURIEncoding="gb2312" setCharacterEncoding("gb2312")(乱码)
ChromePOSTURIEncoding="gb2312" setCharacterEncoding("utf-8")中文正常显示
ChromePOSTURIEncoding="utf-8" -(乱码)
ChromePOSTURIEncoding="utf-8" setCharacterEncoding("gb2312")(乱码)
ChromePOSTURIEncoding="utf-8" setCharacterEncoding("utf-8")中文正常显示
IE11GET--(乱码)
IE11GET-setCharacterEncoding("gb2312")(乱码)
IE11GET-setCharacterEncoding("utf-8")(乱码)
IE11GETURIEncoding="gb2312" -(乱码)
IE11GETURIEncoding="gb2312" setCharacterEncoding("gb2312")(乱码)
IE11GETURIEncoding="gb2312" setCharacterEncoding("utf-8")(乱码)
IE11GETURIEncoding="utf-8" -中文正常显示
IE11GETURIEncoding="utf-8" setCharacterEncoding("gb2312")中文正常显示
IE11GETURIEncoding="utf-8" setCharacterEncoding("utf-8")中文正常显示
IE11POST--(乱码)
IE11POST-setCharacterEncoding("gb2312")(乱码)
IE11POST-setCharacterEncoding("utf-8")中文正常显示
IE11POSTURIEncoding="gb2312" -(乱码)
IE11POSTURIEncoding="gb2312" setCharacterEncoding("gb2312")(乱码)
IE11POSTURIEncoding="gb2312" setCharacterEncoding("utf-8")中文正常显示
IE11POSTURIEncoding="utf-8" -(乱码)
IE11POSTURIEncoding="utf-8" setCharacterEncoding("gb2312")(乱码)
IE11POSTURIEncoding="utf-8" setCharacterEncoding("utf-8")中文正常显示

从上面的测试结果看出:

1.如果是GET请求,应在tomcat的server.xml中设置 URLEncoding="UTF-8" 。

2.如果是POST请求,请在后台设置 httpServletRequest.setCharacterEncoding("utf-8"); 或通过使用MVC框架并设置字符编码参数来解决乱码问题。

以下是测试页面代码:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>字符编码测试</title>
</head>
<body>
<form name="posttest" action="/posttest" method="post">
提交测试(POST): 
<input type="text" name="user" value="中文正常显示" />
<input type="submit" value="Submit" />
</form>
<br />
<a href="/gettest?user=中文正常显示">请点击这里进行GET测试</a>
</body>
</html>

 

转载于:https://my.oschina.net/yxzkm/blog/812959

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值