您的位置:首页 > 运维架构 > Tomcat

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

2017-06-12 00:00 127 查看
servlet处理http协议传输中文的时候有点复杂,我总结一下自己的经验。

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请求。不知道其它应用服务器是否也是这样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  encoding servlet tomcat