JavaWeb学习——Ajax提交URL中文参数乱码问题
2015-08-07 15:35
288 查看
通过URL提交中文参数时,浏览器会先把中文编码转换成GBK或UTF-8(经测试,IE会转换成GBK,FireFox会转换成UTF-8),然后再发送给服务器,
服务器根据默认编码设置或
进行解码。如若编解码顺序不一致就会导致乱码问题。
在之前一个项目中,我在客户端(即JS)没对包含中文参数的URL(http://localhost:8080/TranscodingWeb/Dialog.jsp?test=测试 )进行编码,然后在服务端中采用
进行解码。发现FireFox能正确显示,而IE11却显示乱码。这是浏览器对待中文参数的不同编码方式所致。
因此,我们在发送包含中文参数的URL时,可以先利用encodeURI()对URL进行统一编码,防止因不同浏览器编码不同引起乱码。
解决方式1:
客户端:
encodeURI(url)
服务端(服务器默认编码为ISO-8859-1):
URL编解码过程:
UTF-8(encodeURI())编码 -> ISO-8859-1(服务器)解码 -> getBytes(ISO-8859-1)编码 -> UTF-8解码。
解决方式2:
客户端:
encodeURI(encodeURI(url))
服务端:
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
服务器根据默认编码设置或
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
相关文章推荐
- java-用HttpURLConnection发送Http请求.
- 解决Ajax悬停效果,无法遮蔽FLASH的问题
- 再谈Jquery Ajax方法传递到action(补充)
- VBScript 剪贴板抓取URL并在浏览器中打开
- Dom在ajax技术中的作用说明
- Orace查询数据出现乱码的问题解决思路
- oracle em 按钮乱码解决办法及em网页变成英文
- C#读取中文文件出现乱码的解决方法
- 使用Ajax实时检测"用户名、邮箱等"是否已经存在
- 探讨Ajax中同步与异步之间的区别
- mysql命令提示行连接乱码的解决
- 用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点
- XML指南——XML编码
- 原生AJAX写法实例分析
- 探秘ajax跨域请求
- Ajax中浏览器和服务器交互详解
- ajax实现点击不同的链接让返回的内容显示在特定div里
- ajax 动态传递jsp等页面使用id辨识传递对象
- asp获取URL参数的几种方法分析总结[原创]_应用技巧_脚本之家
- AJAX简单应用实例-弹出层