日期:2014-05-20  浏览次数:20752 次

怎样将我写的java application支持多国语言(中文简体,韩文)
我写了个桌面java   application,对数据库进行增删减,可是从数据库中查询出来的韩文人名都是乱码,请问怎样才能支持中文和韩文?
在数据库中不是乱码,数据库中数据都是正确。  
我测试了,在中文系统下,中文的查询显示都正常,韩文不正常。在韩文系统下,韩文的查询显示都正常,中文不正常。

------解决方案--------------------
看下下面的对你有没有帮助
1.简介

在开发全球使用的软件产品时,如果使用了不一致的字符编码,即与字符关联不一致的数字值,将会产生非常严重的问题,因为计算机是使用数字来处理信息的.例如,字符 "a "被转换为数字值,计算机对这个数字进行处理许多国家和公司开发了编码系统,它们互不兼容.例如.微软的Windows操作系统中值0xC0表示 "带重间记号的A ",而这个值在AppleMacintosh操作系统中表示的是颠倒的问号。这会导致数据的错误解释,甚至可能造成数据毁坏!

如果没有统一的字符编码标准,为了开发全球通用的软件,开发人员就必须在软件发布之前进行大量的本地化工作。包括语言翻译和内容文化调整。如果没有统一字符编码标准,生产和发布全球通用的软件产品就会十分麻烦而代价昂贵。

Unicode标准正是为了解决这一问题而创建的,它是一个编码标准,有助于软件的开发和发布Unicode标准规定了生成世界字符和符号的一致编码规则采用Unicode标准编码的软件产品仍需要进行本地化,但是其过程更简单有效,因为不需要转换数字值,并且字符编码是统一的Unicode标准由一个称Unicode联盟(Unicode Consortium)的非营利组织维护,其成员包括Apple,IBM,Microsoft,Oracle,Sun Microsystems,Sybase待许多公司。

在这个联盟构想和开发Unicode标准时,它认为这个编码系统应当是通用的,有效的,统一的,和无二义的通用编码系统意味着能够容纳所有常用字符,有效的系统能够快速分析文本文件,统一的编码系统意味着所有字符都有固定的值,而无二义性编码系统则以一致的方式来表示给定字符。这四个要求构成了Unicode标准的设计基础。


2。 Unicode转换格式

Unicode中包含了有限的ASCII字符集,还包含了更复杂的字符集。ASCII字符集中的每个字符都有由一个二进制字节表示。一个字节能够保存0~255的二进制数。每个字符都被赋了0-255之间的值,因此基于ASCII的系统只能支持256个字符,它只是世界字符集的很小一部分。Unicode大大扩展了ASCII字符集,它对世界上大部分字符都进行了编码。Unicode标准按统一的数字窨(十六进制0-10FFFF)对字符进行编码。实现时将这些数字表示为若干转换格式之一,应选择能够最好地满足应用程序需求的一种。

目前使用的有3种格式:UTF-8,UTF-16,UTF-32.
UTF-8:它是一种可变宽度的编码方式,用1-4个字节来表示每个Unicode字符。UTF-8数据由8比特字节(根据被编码的字符不同,也可能是1,2,3或4个字节组成的序列)组成。如果基于ASCII的编码系统中多数字符是一个字节的(ASCII系统中每个字符用一个字节表示),最好采用UTF-8。目前,UNIX系统和数据库中广采用UTF-8格式。
UTF-16可变宽度UTF-16编码格式用16比特为单位(即两个相邻的字节,在许多机器中也表示为短整数)表示Unicode字符。Unicode中的大多数字符用一个16比特单位就可以表示,但如果字符的值超过十六进制的FFFF,就用一个称为代理(surrogate)的有序16比特对来表示,以表示D800-DFFF之间的16比特整数,它只用来表示“转换”为编码更高的字符。用这种方式可以表示大约一百万个字符。虽然代理对需要32比特来表示字符,但使用这些16比特单元来表示字符的空间效率还是非常高的.在目前的实现中很少用到代理.许多串处理程序是用UTF-16来编写的.[有关UTF-16的例子代码和详细资料可以在Unicode联盟的网站找到:www.unicode.org]

UTF-32需要大量罕见字符或所有编码大于十六进制FFFF书写室符号的程序应当使用UTF-32,它是32比特固定宽度编码格式,通常比UTF-16需要多一倍的内存.UTT-32的主要优点是以统一的方式表示所有的字符,因此在数组中的处理比较容易.


有一些基本原则可表明何时使用某种编码方式.最好的编码方式取决于计算机系统和业务协议,而不是数据本身.一般来说,如果计算机系统和业务协议需要数据以8比特为单位进行处理,则选择UTF-8编码,告别是在升级的原有系统中,因为常常会简化对原来程序的修改.因此,UTF-8是Internet上选用的编码方式.类似地,UTF-16是Microsoft Windows应用程序选用的编码方式.随着有更多的字符编码到FFFF以上,UTF-32可能在未来得到更广泛的应用.UTF-32比UTF-16的代理对处理起来更简单.

3.字符与字形

Unicode标准由字符,即书写元素(字母,数字,标点符号和重音符号等)组成,它们可以用数字值表示.例如,U+0041 LATIN CAPITAL LETTER A. U+yyyy是码值,其中U+表示这是一个Unicode码值,而不是十六进制值.yyyy是编码字符的四位十六进制表示.码值是编码字符的位组合,字符本身用字形,即形状,字体和大小来表示.Unicode标准中没有字形的码值.


4.Unicode联盟网站

要了解更多有关Unicode标准的信息,可访问www.unicode.org !这个网站提供了大量关于Unicode标准的信息,其主页按Announcements(声明),New to Unicode(新手指南),General Information,The Consortium,For Members Only,The Unicode Standard,Key Specifications, Technical Publications 和Work in Progress 专题组织.


5. Unicode 使用

许多编程语言(如 C ,Java, JavaScript, Perl,Visual Basic)都提供了对Unicode标准的某种程度的支持。
String s = "\u0057\u0065\u006C\u0063\u006F\u006D\u0065 ";
该语句打印出来的结果是字符串“Welcome”
转义序列的形式为\uyyyy,其中yyyy表示四位十六进制码值。
通过不同的码值我们可以表示不同国家的各种符号,Unicode联盟的网站有一个到码表的链接,列出了16位码值。英语,法语,德语,葡萄牙语和西班牙语字符都在Basic Latin区,日语字符在Hiragana区,俄语字符在Cyrillic区,汉语字符在CJK Unified Ideographs 区。
------解决方案--------------------
数据库用utf-8编码。