- 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应用中的汉字乱码问题分析_刘长生概要1
Java应用中的汉字乱码问题分析
刘长生,谢 强,丁秋林
(南京航空航天大学计算机应用研究所,江苏南京210016)
摘 要:根据Java应用中乱码出现的原因将问题分成了4类:由于编译不当导致的乱码、Web应用中的乱码、数据库读写中
的乱码和I/O读写中的乱码。在各个类别中,先给出出现乱码时的现象,然后对现象进行原因分析,再给出解决的办法。最
后,根据做项目的实践经验,给出了一些解决汉字乱码问题的心得。
关键词:Java;字符集;中文乱码
中图分类号:TP319 文献标识码:A 文章编号:1005-3751(2006)01-0158-04
Analysis of Chinese Character Encoding in Java Programming
LIU Chang-sheng,XIE Qiang,DING Qiu-lin
(Computer Application Institute,Nanjing University of Aeronautics and Astronautics,Nanjing 210016,China)
Abstract:First classify the problems into four catalogs according to different causes:incorrect compiling,communication Web application,
R/W in database and R/W in I/O.After that,analyze the cause of phenomenon,and then give a solution in each catalog.Finally,come up
with some conclusions which were summarized from practical project.
Key words:Java;character set;Chinese character encoding
0 前 言
现在大部分具有国际化特征的软件核心字符处理都
是以Unicode为基础的,在软件运行时根据当时的
Locale/Lang/Codepage设置确定相应的本地字符编码设
置,并依此处理本地字符[1]。在处理过程中需要实现
Unicode和本地字符集的相互转换,甚或以Unicode为中
间的两个不同本地字符集的相互转换。这种方式在网络环
境下被进一步延伸,任何网络两端的字符信息也需要根据
字符集的设置转换成可接受的内容[2]。
Java语言在内部采用Unicode表示字符,遵守Unicode
V2.0。Java程序无论是从/往文件系统以字符流读/写文
件,还是往URL连接写HTML信息,或从URL连接读取
参数值,都会有字符编码的转换。这样做虽然增加了编程
的复杂度,容易引起混淆,但却符合国际化的思想。
中文编码有GB2312,GBK,BIG5,GB18030-2000等,
Jdk1.5已经支持GB18030-2000,如果不熟悉Java中的中
文处理方式及相应规范,就很容易造成乱码问题。在很多
种情况下都可能导致Java的中文乱码问题,可以把这些情
况大致分成如下几类:由于编译不当导致的乱码、Web应
用中的乱码、数据库读写中的乱码和I/O读写中的乱码。
下面文中对这几种情况做逐一探讨。
1 由于编译不当导致的乱码
1.1 现 象
下例是一个类的代码片断:
public void encodingTest(){
String str=“你”;
System.out.println(str);
}
上例在中文平台上缺省编译(-Encoding GB2312),
生成ZhClass,在英文平台上缺省编译(-Encoding
ISO8859-1),生成EnClass。ZhClass在中文平台上执行可
以正确显示汉字“你”,但是在英文平台上会出现乱码“?”。
EnClass在英文平台上执行可以正确显示汉字“你”,但是
在中文平台上会出现乱码“??”。
1.2 原因分析
编译Java源程序要调用Javac,如果没有指定
Encoding,则按照系统的默认Encoding。中文平台上是
GB2312,英文平台上是ISO8859-1。Java的编译器实际上
是调用sun.tools.Javac.Main这个类对源文件进行编译,
这个类的compile函数中间有一个encoding的变量,-
encoding的参数其实直接传给encoding变量。编译器就是
根据这个变量来读取Java文件的,然后用UTF-8形式编
译成class文件[3]。
(1)对于7位的Unicode(单字节,高位为0),在其首位
文档评论(0)