- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java 解决URL中文乱码问题.pdf
j ava 解决URL中⽂乱码问题
解决URL中⽂乱码问题
我们主要通过两种形式提交向服务器发送请求:URL 、表单。⽽表单形式⼀般都不会
现乱码问题,乱码问题主要是在URL上⾯。通过前⾯⼏篇博客的介绍我们知道URL
向服务器发送请求编码过程实在是实在太混乱了。不同的操作系统、不同的浏览器、
不同的⽹页字符集,将导致完全不同的编码结果。如果程序员要把每⼀种结果都考虑
进去,是不是太恐怖了?有没有办法,能够保证客户端只⽤⼀种编码⽅法向服务器发
请求?
有 !这⾥我主要提供以下⼏种⽅法
⼀、j avascript
使⽤j avascript编码不给浏览器插⼿的机会,编码之后再向服务器发送请求,然后在服
务器中解码。在掌握该⽅法的时候,我们需要料及j avascript编码的三个⽅法:
escape()、encodeURI()、encodeURIComponent() 。
escape
采⽤SIO Latin字符集对指定的字符串进⾏编码。所有⾮ASCII字符都会被编码为%xx
格式的字符串,其中xx表⽰该字符在字符集中所对应的16进制数字。例如,格式对应
的编码为%20 。它对应的解码⽅法为 nescape() 。
事实上escape()不能直接⽤于URL编码,它的真正作⽤是返回⼀个字符的Unicode编码
值。⽐如上⾯“我是cm”的结果为% 62 11% 662Fcm ,其中“我”对应的编码为
62 11,“是”的编码为662F ,“cm”编码为cm 。
注意,escape()不对”+”编码。但是我们知道,⽹页在提交表单的时候,如果有空格,
则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。所以,使⽤的时
候要⼩⼼。
encodeURI
对整个URL进⾏编码,它采⽤的是UTF-8格式输 编码后的字符串。不过encodeURI除
了ASCII编码外对于⼀些特殊的字符也不会进⾏编码如:! @ # $ * ( ) = : / ; ? + ‘。
encodeURIComponent()
把URI字符串采⽤UTF-8编码格式转化成escape格式的字符串。相对于encodeURI ,
encodeURIComponent会更加强⼤,它会对那些在encodeURI() 中不被编码的符号 (; / ?
: @ = + $ , # )统统会被编码。但是encodeURIComponent只会对URL 的组成部分进⾏
个别编码,⽽不⽤于对整个URL进⾏编码。对应解码函数⽅法decodeURIComponent 。
当然我们⼀般都是使⽤encodeURI⽅来进⾏编码操作。所谓的j avascript两次编码后台
两次解码就是使⽤该⽅法。j avascript解决该问题有⼀次转码、两次转码两种解决⽅
法。
⼀次转码
j avascript转码:
var url = s:property value=webPath //ShowMoblieQRCode.servle
window .location.href = encodeURI(url);
转码后的
URL ::8080/perbank/ShowMoblieQRCode.servlet
name=%E6%88%91%E6%98%AFcm
后台处理:
String name = request.getParameter(name);
System.out.println(前台传⼊参数: + name);
name = new String(name.getBytes(ISO-8859-1),UTF-8);
System.out.println(经过解码后参数: + name);
输 结果:
前台传⼊参数:??????cm经过解码后参数:我是cm
⼆次转码
j avascript
var url = s:property value=webPath //ShowMoblieQRCode.servle
window .location.href = encodeURI(encodeURI(url));
转码后的
rl::8080/perbank/ShowMoblieQRCode.servlet
name=%25E6%2588%2591%25E6%2598%25AFcm
后台处理:
String name = request.getParameter(name);
System.out.println(前台
文档评论(0)