java 解决URL中文乱码问题.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

tangtianbao1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档