和servlet相关的中文编码的一些经验

本文介绍了URL及HTTP请求体中字符集的处理方式,包括URL编码标准、Tomcat中URL字符集的设定方法、请求体中字符集的指定方式以及如何通过Servlet API设定字符集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

URL的字符集

为了在URL中含有asc ii编码以外的字符时,前人制定了url encoding的标准。这个标准只定义了用%加上其它字符的16进制码来代替那个字符传输。对于像中文这样的字符,同样的字符可能通过不同的字符集被映射到不同的16进制码上,但是http协议并没有定义如何告知别人url encoding用的是什么字符集。既然这样,只好给服务器设定一个默认的字符集了。应用程序如果需要使用其它字符集,只能自己完成那样的功能。在tomcat中可以通过server.xml的Connector元素的URIEncoding属性来设置默认值。

body中的字符集

body中的字符集可以通过头部Content-Type的值来指定,如 Content-Type: application/x-www-form-urlencoded; charset=utf-8。如果没有制定的话,服务器又是只能用默认值了。对于tomcat,好像还没有办法设定这个默认值。所以Content-Type里面最好把字符集显式的带上。

ServletRequest.setCharacterEncoding()

ServletRequest上的这个方法,可以让应用程序设定用什么字符集来解析URL和body内的字符。但是我在使用tomcat的时候发现,tomcat只解析一次,所以如果要设定这个值,一定要在调用ServletRequest的getParameter() getParameterNames()等方法之前设定,否则就算设定了,之后的getParameter()等方法还是会用第一次解析出的值。一般,我们用一个filter来设定这个值,那么这个filter应当在最外层,最先处理http请求。不知道其它应用服务器是否也是这样的。

转载于:https://my.oschina.net/komodo/blog/919184

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值