GET请求中中文乱码的解决

GET请求中的乱码原理解析和解决方案

《深入分析javaweb技术内幕》第三章

web应用中浏览器与服务端的编码和解码


浏览器会自动对url进行编码,不同浏览器用的编码集不同,可进行设置。

tomcat默认是用iso-8859-1对uri和get参数进行解码,所以如果这个过来的get参数是用的utf-8编码的,到了服务器端tomcat用iso8859-1解码就会出现乱码。

修改tomcat配置的解决方法:
修改配置文件server.xml <conntect URIEncoding="UTF-8"/>,用utf-8对uri解码。
tomcat对get参数解码用的编码集,要么是Header的ContentType定义的charset,要么是默认的ISO-8859-1。
设置useBodyEncodingForURI=true使tomcat使用ContentType的charset。这个属性是表示对get参数使用BodyEncoding进行解码而不是对整个uri。

不改tomcat配置:

  1. 在java中用iso8859-1解码后用utf-8编码
    key = new String(key.getBytes("iso8859-1"), "utf-8");

  2. 可以前端两次编码uri,到服务端两次解码uri,tomcat一次(ISO-8859-1),手动一次(utf-8)。
    因为对英文字符来说UTF-8编码和ISO-8859-1编码的效果相同。
    但是如果有特殊字符,就没法得到正确的结果。

ajax发请求时如果用encodeURI()用utf-8编码,浏览器会不会干涉再编码一次?


另外,
在java端处理url编解码有两个类,URLEncoder和URLDecoder。这两个类可以将所有“%”加utf-8码值用utf-8解码,从而得到原始的字符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值