关于tomcat中的编码转换

http get方式的编码问题

比如一个笔者随手写的一个网址:http://www.baidu.com/君山?name=君山

它大致分为三部分:

  • scheme协议:http
  • uri:www.baidu.com/君山
  • queryString请求参数:name=君山

后面两部分需要注意编码问题

对于uri来说,在网络传递过程中他的编码是不确定的,和浏览器的默认设置有关,通常是utf-8编码了。但是tomcat中对于uri默认的解码方式是通过iso-8859-1来解码,那么编码和解码不一致导致了乱码。我们可以通过设置server.xml中connector的URIEncoding属性为UTF-8来解决。这样tomcat就会默认用utf-8来解析uri了。

对于queryString请求参数来说,它的编码方式和http头部的ContentType有关,如果头部中没有ContentType,则采用发出请求网页的<meta charset="UTF-8">有关,这里为utf-8编码。tomcat中默认也会采用iso-8859-1来解码,会产生乱码。可以设置server.xml中的useBodyEncodingForURI属性为true,那么他会根据请求头部中的contentType指定的相应编码解码。或者通过request.setCharacterEncoding("UTF-8");设置对请求参数的解码。还有其他方法,如图:

 

http Header中Cookie、redirectPath 等编码

因为在tomcat中不能设置header中内容的解码方式,因此如果有非ascii码的字符肯定会乱码。因此非要在header中写入中文,比如在Cookie中写入中文字符,可以使用org.apache.catalina.util.URLEncoder将这些字符编码后再添加到Cookie中,读入的时候使用相应的函数来解码。 

POST 表单的编解码

浏览器发送post表单时也是通过contenttype或者html中的<meta>元素来指定编码方式,在tomcat中也可以通过设置connector的useBodyEncodingForURI属性和在代码中设置request.setCharacterEncoding("UTF-8");等方法来解码。


 

参考:

JavaWeb的编码问题深入分析

谈谈字符集与字符编码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值