科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字: 字符 多字节 J2EE

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

运行时阶段

在运行过程中J2EE应用很可能会与其它外部系统通信。应用也许会读写文件,或者用数据库管理数据,有时候还可能用LDAP(轻量目录访问协议)服务器存储标识信息。在这些情况下,J2EE应用和外部系统之间需要进行数据交换。如果数据中带有象中文这样的多字节字符,就可能会遇到问题。

大部分的外部系统都有他们自己的编码设置。例如LDAP服务器很可能使用UTF-8对字符编码;Oracle数据库系统用环境变量NLS_LANG来指定编码方式。如果Oracle是安装在中文操作系统上,该变量的默认设置为ZHS16GBK,也就是用GBK编码方式来存储中文字符。因此当J2EE应用的编码设置与外部系统不同时需要进行转码,通常用以下代码来完成这一工作:

byte[] defaultBytes = 
original.getBytes(current_encoding);
String newEncodingStr = 
new String(defaultBytes, 
old_encoding);

以上代码给出了如何将字符串从一种编码方式转换为另一种。例如你在LDAP服务器中用UTF-8编码存储了一个用户名(多字节字符),而在J2EE应用中用的却是GBK编码,因此当应用从LDAP服务器中取用户名时就可能被错误地编码。

要解决这个问题,可以用original.getBytes("GBK")得到原始的字节,然后用new String(defaultBytes, "UTF-8")构造一个新字符串,这样就可以正确显示了。

客户端显示阶段

现在大多数J2EE应用都采用浏览器/服务器架构,以浏览器作为客户端。要在浏览器里正确显示多字节字符,需要注意以下几个方面:

浏览器语言支持:

为能正确地显示多字节字符,浏览器及其所运行的操作系统应提供对特定语言的支持,比如字体和字码表。

浏览器编码设置

服务器返回的HTML头

<meta http-equiv="content-type" 
content="text/html;charset=gb2312">

向浏览器声明了该页面使用的编码方式,否则浏览器将使用默认编码设置或自动进行匹配。当然,用户也可以对页面的编码进行设定,如图6所示。

图6 Netscape的编码设置页

因此如果页面没有声明,多字节字符就可能显示不正确,在这种情况下用户必须手工设定当前页面的编码方式。

HTTP POST编码

用HTML页面的Form标签向服务器提交数据会使情况变得更为复杂。浏览器的编码方式取决于当前页面的编码设定,对Form标签也照此处理。这意味着如果ASCII格式的HTML页面用ISO-8859-1编码,那么用户在此页面中将不能提交中文字符。

这是因为所有提交的数据都用ISO-8859-1编码,这将使中文字符丢失字节。所有的浏览器都遵守这个HTML标准。

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

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

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