Servlet乱码问题的解决

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值