Java编程技术中汉字问题的分析及解决
在基于Java语言的编程中,经常会遇到汉字的处理和显示问题。一大堆乱码绝对不是我们想看到的显示效果。怎样才能让那些汉字正确显示?Java语言默认的编码方式是UNICODE,而国人常用的文件和数据库都是基于GB2312或BIG5编码的。如何才能正确选择汉字的编码方式,正确处理汉字的编码?本文将从汉字编码常识入手,结合Java编程实例,对上述两个问题进行分析,并提出解决方案。
现在Java编程语言已经在互联网世界广泛使用。早在Sun公司开发Java语言时,就已经考虑了对非英文字符的支持。Sun发布的Java runtime environment (JRE)分为英文版和国际版,但只有国际版支持非英文字符。然而,在Java编程语言的应用中,对汉字的支持并不像Java Soft的标准规范中声称的那样完善。因为中文字符集不止一个,而且不同的操作系统对中文字符的支持也不同,所以在我们的应用开发中,会有很多与中文字符编码和处理相关的问题困扰着我们。这些问题的答案有很多,但都很琐碎,满足不了大家迫切解决问题的愿望。对Java中文的系统研究并不多。本文从汉字编码常识来分析Java中文,希望能帮助你解决这个问题。
汉字编码常识
我们知道,英文字符一般用一个字节表示,最常用的编码方式是ASCII。但是一个字节最多只能区分256个字符,而汉字却有上千个,所以现在汉字都是用双字节来表示。为了与英文字符分开,每个字节的位必须是1,这样双字节最多可以表示64K个字符。我们经常会遇到GB2312、BIG5、UNICODE等编码方式。具体编码方式的详细信息,有兴趣的读者可以查阅相关资料。我来粗浅的说一下GB2312和UNICODE,这两个和我们息息相关的东西。GB2312码,即中华人民共和国国家标准汉字信息交换码,是中华人民共和国国家标准总局发布的简化字码,在中国大陆和新加坡广泛使用,简称国标码。在这两个字节中,第一个字节(高字节)的值是区号值加32(20H),第二个字节(低字节)的值是标签号值加32(20H)。这两个值用来表示一个汉字的编码。UNICODE是微软为解决多国字符问题而提出的多字节等长码。它采用在英文字符前添加“0”字节的策略来实现等长兼容。如果“A”的ASCII码是0x41,那么UNICODE就是0x00和0x41。使用特殊的工具,各种代码可以相互转换。
对Java问题的初步了解
当我们开发基于Java编程语言的应用程序时,不可避免地要与中文打交道。Java编程语言默认的编码方式是UNICODE,而我们平时使用的数据库和文件都是基于GB2312编码的。我们经常会遇到这样的情况:浏览基于JSP技术的网站时,看到的是乱码,打开文件时看到的是乱码,Java修改的数据库内容在其他场合应用时无法继续提供正确的信息。
String sEnglish = " apple
String sChinese = " apple
String = "苹果苹果";
sEnglish的长度是5,sChinese是4,S的默认长度是14。对于sEnglish来说,Java中的所有类都得到了很好的支持,可以正确显示。但是对于sChinese和S,虽然Java Soft声明Java的基本类已经考虑到了对多国字符的支持(默认UNICODE编码),如果操作系统的默认编码不是UNICODE,而是国家标准代码等。从Java源代码到得到正确的结果,我们要经历“Java源代码-> Java字节码->;虚拟机->操作系统->显示设备”。在上述过程的每一步中,我们都必须正确处理汉字的编码,这样最终的显示结果才能正确。
位律师回复
0条评论