您的位置:首页 > 其它

Servlet乱码问题的解决

2010-04-07 00:46 197 查看
以下分析基于以下假设:编码格式统一采用UTF-8

post方式:

服务端:
在第一次调用request.getParameter时,会对Parameter进行解析,如果没有设置解析(解码)所用的encoding,则使用默认的编码org.apache.coyote.Constants.DEFAULT_CHARACTER_ENCODING("ISO-8859-1")对参数进行解析。因此如果参数中包含中文,解析出来的就是乱码了。因此如果要支持对中文的解析,就要在第一次调用request.getParameter前,先设置解析参数时用的编码格式,如:
request.setCharacterEncoding("UTF-8");
客户端:
同样,在客户端,如果要让浏览器支持中文的显示,就必须设置网页的编码格式,如:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

get方式:

客户端:

如果uri中包含中文,则必须对其进行编码:

<a href="download?filename=<%=java.net.URLEncoder.encode(file,"UTF-8") %>"><%=file %></a>

这里采用utf8编码。

服务端:

服务端必须知道客户端采用的编码方式,然后采用同样的方式解码。可以在server.xml中告诉服务端客户端的编码方式:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443" URIEncoding="UTF-8"/>

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

对于form中的get方式,在提交后,浏览器会使用当前页面的编码格式,对中文参数进行uri编码,因此不用人为的进行编码了。只要确保页面的编码也是utf8即可:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: