JavaWeb学习——Ajax提交URL中文参数乱码问题 2015-08-07 15:35 6人阅读 评...

    通过URL提交中文参数时,浏览器会先把中文编码转换成GBK或UTF-8(经测试,IE会转换成GBK,FireFox会转换成UTF-8),然后再发送给服务器,

服务器根据默认编码设置或

request.setCharcterEncoding()

进行解码。如若编解码顺序不一致就会导致乱码问题。

    在之前一个项目中,我在客户端(即JS)没对包含中文参数的URL(http://localhost:8080/TranscodingWeb/Dialog.jsp?test=测试 )进行编码,然后在服务端中采用

String test = new String(request.getParameter("test“).getBytes(ISO-8859-1), "UTF-8");

进行解码。发现FireFox能正确显示,而IE11却显示乱码。这是浏览器对待中文参数的不同编码方式所致。

    因此,我们在发送包含中文参数的URL时,可以先利用encodeURI()对URL进行统一编码,防止因不同浏览器编码不同引起乱码。


解决方式1:

客户端:

encodeURI(url)

服务端(服务器默认编码为ISO-8859-1):

String test = new String(request.getParameter("test“).getBytes(ISO-8859-1), "UTF-8");

URL编解码过程:

UTF-8(encodeURI())编码 ->  ISO-8859-1(服务器)解码 -> getBytes(ISO-8859-1)编码 -> UTF-8解码。


解决方式2:

客户端:

encodeURI(encodeURI(url))

服务端:

<span style="font-size:18px;">URLDecoder.decode(request.getParameter("test“), "UTF-8")</span>

URL编解码过程:

UTF-8(encodeURI())编码 -> UTF-8二次编码 -> ISO-8859-1(服务器)解码 ->  UTF-8(URLDecoder)解码。

为什么两次UTF-8编码后,可以用一次ISO-8859-1和一次UTF-8解码呢?这是因为第一次编码后多字节的中文参数已被编码成英文字符,而对英文字符来说,ISO-8859-1和UTF-8编码效果是一样的,都是单字节,所以这样也能正确解码。


参考资料:

http://blog.csdn.net/saygoodbyetoyou/article/details/16834395

http://blog.csdn.net/ultrani/article/details/8176122



版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/shankslee/p/4714127.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值