怎么把UNicode转化成为汉字

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

字体编码学习-Java 编程技术中汉字问题的分析及解决

---JAVA汉字显示问题的解决方案

分类:java相关2007-06-07 02:31 1593人阅读评论(0) 收藏举报

字体编码学习-

关键字:USC,Unicode,utf-8,gb2312,字库

什么是编码

为了交流信息,所以对字符进行了统一的编码。

UCS和ISO10646

ISO10646定义了通用字符集(Universal Character Set,UCS).UCS是国际标准编码,包含了全球

所有字符。UCS使用31bit进行编码。现在只分配了前65534个码位,这个16位的子集称为基本多语言面

(BMP)。

什么Unicode

Unicode编码是UCS级别3的实现。Unicode编码全码为4个字节,所有字符都使用等的编码方式,现

在只使用两个字节编码。兼容UCS定义的BMP

GB2313与Unicode

GB2312是中国定制的国际准标编码,由两个字节组成,最高位为1表示汉字,最高为0表示是英

文。

GB2312与区位码存在数值关系,区位码+20H=GB2312

GB2312与Unicode的转换不成数学关系,只能通过映射表来实现。

GB2312为80年定义的基本编码扩展编码有

GBK

GB18030

GB13000与GBK不兼容,只是使用了相同的词汇.

最新为GB16500-95与unicode3.0兼容

Unicode与UTF-8

Utf-8是为了兼容软件处理的编码,是unicode的另一种表示方式。使用变化的方式编码,第一

字节表示字符的长度,后面的字符以10开头表示编码。0开头表示ascii编码。

例如:

Unicode 字符U+00A9 = 1010 1001 (版权符号) 在UTF-8 里的编码为

11000010 10101001 = 0xC2 0xA9

字库与编码关系

字库是编码表字符显示的描述文件。字符编码是在字库中查询需要显示的字符的索引值。

不同的编码就应该有不同的字库,比如unicode编码就有unicode的字库。Gb2312编码就有

gb2312的字库。

字库格式

字库的格式主要有TrueType(ttf),PostScript(rip),OpenType等

TrueType是微软定义的字库格式,主要用于软件显示这种要求精度不高的环境,

PostScript是Adobe定义的字库格式,主要用于排版印刷等大字打印精度要求很高的环境。

OpenType是TrueType与PostScript的综合格式,并且是使用了unicode的编码。

字体引擎

字体引擎用于读取字库,显示文字,文字转换等操作。现在免费的字体引擎有FreeType.

参考文献

UTF-8 and Unicode FAQ by Markus Kuhn

/linux/TrueType-HOWTO.html

/Info/55/Info16006/

/fonts/TTRefMan/index.html

////////////////////////////////////////////////////////////////////////////////////

以前一直对utf、unicode、ascII还有GBK编码方式不太了解,只知道如果有中文的话一般用utf-8或GBK

存储,今天正好又接触到了这个问题就google了下。ASCII是用来表示英文的一种编码规范,表示的最

大字符数为256个,每个字符占1个字节。如果只用来表示英文应该是绰绰有余了,可是还要表示中文、

阿拉伯文所以就有很大的不足了,于是就产生了GB2312。很多人应该对这个比较了解,很多国内网页指

定的编码都是GB2312的,它其实是对ASCII的一种扩展,是每个国家自己制定的编码规范,比如一个中

文字符是由两个扩展ASCII字符表示。但因为GB2312是国家标准所以会有一些问题,记得我们小时候玩

一些繁体游戏时需要借助一些南极星之类的软件转换编码吗?因为台湾很多用的都是big5编码,他和

GB2312的编码格式还是类似的,会显示出一些奇怪的文字或是偶尔也会有个别汉字。后来因为GB2312所

包含的汉字太少了,所以又扩展出来GBK编码。GBK包括了大部分的汉字,并且还加入了big5中几乎所有

的繁体字体(但big5和GBK中的繁体字体并不兼容)。之后还有GB18030编码,其实主要还是字符集的变

化。ASCII—GB2312—GBK—GB18030他们都是向下兼容的,区分英文编码和中文编码的方法是高字节的

最高位不为0,其实GB中文编码都是双字节字符集。

因为GB编码都是国家标准,所以如果要解决中文问题不能从扩展ASCII角度入手了,于是出现了unicode

和utf。unicode分为UCS-2、UCS-4,目前常用的是UCS-2是用2个字节为字符编码,可以表示的数为

2^16=65535,基本可以表示欧美和大部分亚洲汉字,并且因为UCS-2是双字节的所以每个汉字或英文都

是由1个unicode构成,那拆字和统计字数比ASCII方便了很多。似乎unicode是比较完美了,可是它却有

一个很致命的缺点,就是并不能和ASCII兼容。ASCII字符是单个字节的,比如"A"的ASCII 是65。而

Unicode是双字节的,比如"A"的Unicode是0065,这就造成了一个非常大的问题:以前处理ASCII的那套

机制不能被用来处理Unicode了。另一个更加严重的问题是,C语言使用'/0'作为字符串结尾,而

Unicode里恰恰有很多字符都有一个字节为0,这样一来,C语言的字符串函数将无法正常处理Unicode,

除非把世界上所有用C写的程序以及他们所用的函数库全部换掉。

于是出现了utf,它是将Unicode编码规则和计算机的实际编码对应起来的一个规则。现在流行的UTF有2

种:UTF-8和UTF-16。UTF-8是以8位为单元对UCS进行编码,它定义了一种"区间规则",这种规则可以和

ASCII编码保持最大程度的兼容。具体的编码方式大家可以搜索一下,俺也只是一些浅显的了解,如果

相关文档
最新文档