在我们java Web开发中,使用servlet处理get请求时,倘若get请求中携带了中文格式的参数,直接传给后台会出现乱码。
比较直观的解决方式如下:
String name= request.getParameter("name") //定义一个变量装载前台传来的参数
如果直接打印这个name,可以发现会出现乱码。
//处理乱码
name = new String(name.getBytes("ISO8859-1"),"UTF-8");
再打印name看看吧!
拓展:
每次中文参数都要处理会比较麻烦,我们可以使用过滤器:
public String getParameter(String name) {
String val = super.getParameter(name);
if (value == null)
return null;
String method = request.getMethod();
if ("get".equalsIgnoreCase(method)) {
try {
val = new String(val.getBytes("ISO8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return value;
}
乱码原因:
在tomcat安装目录下的conf/server.xml中,有这样的配置(在这里面可以更改tomact的默认端口号):
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
其中有关编码集属性的是,URIEncoding属性。该属性决定了使用get请求通过浏览器地址栏访问tomcat时的编码方式(默认为ISO8859-1)。
所以我们直接更改URIEcoding值为 “UTF-8” 也可解决乱码问题。
从tomcat 8.0开始,URIEcoding 的默认值不再是ISO9588-1,而变成了 UTF-8.所以从toncat 7.x移植到 8.x可能要删减处理乱码问题的代码模块。