科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字: 字符 多字节 J2EE

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

多字节字符问题的解决方案

编写能运行于任何服务器、在任何浏览器中都能正常显示的J2EE应用是个挑战,下面是一些针对J2EE应用多字节字符问题的解决方案:

通用原则:从不假定客户端(浏览器)和服务器端有任何默认设置。

在编辑阶段,不要假定IDE的默认编码设置是你想要的,要手工设置它们。

如果IDE不支持特定语言,就在Java代码中用\uXXXX转义序列,在HTML页面中用&#XXXX转义序列,或用随JDK分发的native2ascii工具将本地文字字符串转换成Unicode转义序列,这样就能避免绝大部分问题。

在编码阶段,从不假定服务器默认的编码处理设置是正确的,而用下面的方法显式指定:

· 请求:

setCharacterEncoding()

· 响应:

setContentType(), 
setLocale(),
<%@ page contentType="text/html; 
charset=encoding" 
%>

在为多种语言开发应用时,采用UTF-8编码方式或将所有语言的字符都用\uXXXX转义序列表示。

· 在编译Java类时,确保当前语言环境变量与编码方式正确匹配。

· 在配置阶段,尽可能地使用标准设置。例如在Servlet 2.4规范中有一个配置每个应用的字符编码方式的标准:

<locale-encoding-mapping-list>
    <locale-encoding-mapping>
        <locale>ja</locale>
        <encoding>Shift_JIS</encoding>
    </locale-encoding-mapping>
</locale-encoding-mapping-list>

当与外部系统通信时,尽可能地找出这些系统的编码方式,如果编码不同就进行转码。可以用UnicodeFormatter.java作为调试器打印所有的字节:

清单4

UnicodeFormatter.java
import java.io.*;
public class UnicodeFormatter  
{   
static public
String byteToHex(byte b) 
{      
// Returns hex String 
representation of byte b      
char hexDigit[] = 
{         
'0', '1', '2', '3', '4', '5', '6', '7',         
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'      
};      
char[] array = 
{ 
hexDigit[(b >> 4) & 0x0f], 
hexDigit[b & 0x0f] };      
return new String(array);   
}   
static public String charToHex(char c) 
{      
// Returns hex String 
representation of char c      
byte hi = (byte) (c >>> 8);      
byte lo = (byte) (c & 0xff);      
return byteToHex(hi) + byteToHex(lo);   
}
}

总在HTML页面中对编码方式做显式声明,例如 content="text/html;charset=gb2312">,不要假定浏览器的默认设置是正确的。

· 不要在链接里加入多字节字符,例如查询字符串里不要用用户名,改用用户ID。

· 如果必须在链接里加入多字节字符,那就要对URL进行手工编码,可以在服务器端处理(用Java),也可以在客户端处理(用JavaScript或VBscript)。

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

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

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