科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道专家讲述J2EE中的多字节字符的处理 (7)

专家讲述J2EE中的多字节字符的处理 (7)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

专家讲述J2EE中的多字节字符的处理 (7)

作者:observer 来源:Matrix 2007年11月18日

关键字: 字符 多字节 J2EE

  • 评论
  • 分享微博
  • 分享邮件

HTTP GET编码

URL链接中带有多字节字符会使事情复杂化,这种情况很常见,例如在链接里加入用户名或其它信息以便传给下一页。

但RFC (因特网标准草案) 2396中并未明确规定URL中有非US-ASCII字符时的格式,不同的浏览器会采用它们自己的方式来编码URL中的多字节字符。

以Mozila为例(如图7/8/9/10),通常是在HTTP请求发送前对URL编码。我们知道在URL编码过程中,首先根据某种编码方式(如UTF-8或GBK)将一个多字节字符转换成两个或更多的字节,然后每个字节用3个字符组成的字符串%xy来表示,其中xy是表示该字节的两个十六进制数。这方面的更多信息可参考HTML规范。不管怎样,URL编码所采用的编码方式取决于当前页面的编码方式。

我用下面这个gbk_test.jsp页面做演示:

清单3

gbk_test.jsp
<%@page contentType="text/html;charset=GBK"%>
<HTML>   
<BODY>      
<a href='/chartest/servlet/httpGetTest?name=王'>
<h1>Test for GBK encoded URL</h1></a>   
</BODY>
</HTML>

x738b是一个中文字符的转义值,这个中文字符就是我的姓。该页面如图7所示。

图7 Mozilla的URL

当鼠标移动到该链接上时,链接的地址就会在状态栏中显示出来,可以看到URL中嵌入了一个中文字符。点击页面中的链接,可以从地址栏中清楚地看到该字符已被URL编码。字符x738b被编码为%CD%F5,这是URL编码与GBK编码共同作用的结果。

在服务器端,用request.getQueryString()方法取出查询字符串;为与查询字符串相比较,接下来的一行用另一种方法getParameter(String)来显示字符,如图8所示。

图8 Mozilla中的URL编码

把当前页面的编码方式由GBK改为UTF-8,再次点击页面中的链接,出现的结果为:x738b被编码为%E7%8E%8B,如图9所示,这是URL编码与UTF-8共同作用的结果。

图9 Mozilla中的URL编码

Microsoft的IE浏览器却以不同的方式处理多字节的URL编码。IE在HTTP请求发送前不对URL编码,URL编码方式取决于当前页面的编码方式,如图10所示。

图10 IE不对URL编码

IE还有一个高级选项设置,可以强制浏览器总是以UTF-8编码方式发送URL请求,如图11所示。

图11 IE中的高级选项设置

根据以上说明我们会面临一个问题:如果应用页面的URL链接中带有多字节字符,只要用GBK编码就能在Mozilla里正常使用;但如果用户的客户端是IE,且在设置中强制浏览器以UTF-8编码发送URL请求,那么在使用中就会遇到问题。

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章