Tomcat后台中文乱码分析

web应用程序在提交中文数据的时候,后台常常出现乱码现象。为了完全分析产生缘由,作了一个简单测试:html

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

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

Browser Method Tomcat URIEncoding httpServletRequest System.out
Chrome GET - - (乱码)
Chrome GET - setCharacterEncoding("gb2312") (乱码)
Chrome GET - setCharacterEncoding("utf-8") (乱码)
Chrome GET URIEncoding="gb2312"  - (乱码)
Chrome GET URIEncoding="gb2312"  setCharacterEncoding("gb2312") (乱码)
Chrome GET URIEncoding="gb2312"  setCharacterEncoding("utf-8") (乱码)
Chrome GET URIEncoding="utf-8"  - 中文正常显示
Chrome GET URIEncoding="utf-8"  setCharacterEncoding("gb2312") 中文正常显示
Chrome GET URIEncoding="utf-8"  setCharacterEncoding("utf-8") 中文正常显示
Chrome POST - - (乱码)
Chrome POST - setCharacterEncoding("gb2312") (乱码)
Chrome POST - setCharacterEncoding("utf-8") 中文正常显示
Chrome POST URIEncoding="gb2312"  - (乱码)
Chrome POST URIEncoding="gb2312"  setCharacterEncoding("gb2312") (乱码)
Chrome POST URIEncoding="gb2312"  setCharacterEncoding("utf-8") 中文正常显示
Chrome POST URIEncoding="utf-8"  - (乱码)
Chrome POST URIEncoding="utf-8"  setCharacterEncoding("gb2312") (乱码)
Chrome POST URIEncoding="utf-8"  setCharacterEncoding("utf-8") 中文正常显示
IE11 GET - - (乱码)
IE11 GET - setCharacterEncoding("gb2312") (乱码)
IE11 GET - setCharacterEncoding("utf-8") (乱码)
IE11 GET URIEncoding="gb2312"  - (乱码)
IE11 GET URIEncoding="gb2312"  setCharacterEncoding("gb2312") (乱码)
IE11 GET URIEncoding="gb2312"  setCharacterEncoding("utf-8") (乱码)
IE11 GET URIEncoding="utf-8"  - 中文正常显示
IE11 GET URIEncoding="utf-8"  setCharacterEncoding("gb2312") 中文正常显示
IE11 GET URIEncoding="utf-8"  setCharacterEncoding("utf-8") 中文正常显示
IE11 POST - - (乱码)
IE11 POST - setCharacterEncoding("gb2312") (乱码)
IE11 POST - setCharacterEncoding("utf-8") 中文正常显示
IE11 POST URIEncoding="gb2312"  - (乱码)
IE11 POST URIEncoding="gb2312"  setCharacterEncoding("gb2312") (乱码)
IE11 POST URIEncoding="gb2312"  setCharacterEncoding("utf-8") 中文正常显示
IE11 POST URIEncoding="utf-8"  - (乱码)
IE11 POST URIEncoding="utf-8"  setCharacterEncoding("gb2312") (乱码)
IE11 POST URIEncoding="utf-8"  setCharacterEncoding("utf-8") 中文正常显示

从上面的测试结果看出:浏览器

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

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

如下是测试页面代码:post

<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>
相关文章
相关标签/搜索