以下分析基于以下假设:编码格式统一采用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">