各种字库编码

各种字库编码
各种字库编码

一:ASCII码

1.定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母。

2.同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位(从b0开始)。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

3.后128个称为扩展ASCII码,目前许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

二:字母知识

拉丁字母:

Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz

拉丁字母,斯拉夫字母和阿拉伯字母被称为世界三大字母体系。

各种语言使用的拉丁字母

注意:部分字母会显示乱码。汉语(25个)Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Ww Xx Yy Zz汉语中少一个V 英语(26个)Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz 法语(26个)Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz 荷兰语(27个)Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx IJij Yy Zz 意大利语(21个)Aa Bb Cc Dd Ee Ff Gg Hh Ii Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Zz 5个外来字母(Jj Kk Ww Xx Yy)毛利语(15个)Aa Ee Hh Ii Kk Mm Nn Ngng Oo Pp Rr Tt Uu Ww Whwh (英国)威尔士语[Welsh](28个)Aa Bb Cc Ch ch Dd Dd dd Ee Ff Ff ff Gg Ng ng Hh Ii Ll Ll ll Mm Nn Oo Pp Ph ph Rr Rh rh Ss Tt Th th Uu Ww Yy (意大利)撒丁尼亚语[Sardinian](27个) Aa Àà Bb Cc Dd Ee Èè Ff Gg Hh Ii Ìì Jj Ll Mm Nn Oo Òò Pp Qq Rr Ss Tt Uu Ùù Vv Zz 欧西坦语[Occitan](23个)Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Xx Zz (菲律宾)宿务语[Cebuano](20个) Aa Bb Kk Dd Ee Gg Hh Ii Ll Mm Nn Ng ng Oo Pp Rr Ss Tt Uu Ww Yy (意大利)伦巴第语[Lombard](22个)Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Zz (法国)布里多尼语[Breton](25个)Aa Bb Ch ch C'h c'h Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Rr Ss Tt Uu Vv Ww Yy Zz (法国)科西嘉语[Corsican](24个) Aa Bb Cc Chj chj Dd Ee Ff Gg Ghj ghj Hh Ii Jj Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Zz

三:ISO/IEC8859

1.ISO8859 不是一个标准,而是一系列的标准,这套字符集与编码系统的共同特色是,以同样的码位对应不同字符集。

四:Unicode

Unicode 是为了解决傳統的字元編碼方式的侷限而產生的,例如ISO 8859所定義的字元雖然在不同的國家中廣泛地使用,可是在不同國家間卻經常出現不相容的情況。很多傳統的編碼方式都具有一個共同的問題,即其容許電腦進行雙語環境式的處理(通常使用拉丁字母以及其本地語言),但卻無法同時支援多語言環境式的處理(指可同時處理混合多種語言的情況)。Unicode 编码包含了不同写法的字,如“a /a”、“強/强”、“戶/户/戸”。然而在汉字方面引起了一字多形的認定爭議(詳見中日韓統一表意文字主題)。在文字處理方面,Unicode 的功用是為每一個字元提供一個唯一的代碼(即一組數字),而不是一種字形。換句話說,Unicode是將字元以一種抽象的方式來呈現,而將視覺上的演繹工作(例如字體大小、外觀形狀、字體形態、文體等)留給其他軟件來處理,例如網頁瀏覽器或是文字處理器。

考虑到Unicode最终要涵盖所有的字符,从某种意义而言,这些编码方式也可视作Unicode 的出现于其之前的既成事实的实现方式,如同ASCII及其扩展Latin-1一样,后两者的字符在16位Unicode编码空间中的编码第一字节各位全为0,第二字节编码与原编码完全一致。

Unicode的编码方式与ISO 10646的通用字符集(Universal Character Set,UCS)概念相对应,目前实际应用的Unicode版本对应于UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示216即65536个字符。基本满足各种语言的使用。实际上目前版本的Unicode尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。上述16位Unicode字符构成基本多文种平面(Basic Multilingual Plane,简称BMP)。最新(但未实际廣泛使用)的Unicode版本定义了16个辅助平面,两者合起来至少需要占据21位的编码空间,比3字节略少。但事实上辅助平面字符仍然占用4字节编码空间,与UCS-4保持一致。未来版本会扩充到ISO 10646-1实现级别3,即涵盖UCS-4的所有字符。UCS-4是一个更大的尚未填充完全的31位字符集,加上恒为0的首位,共需占据32位,即4字节。理论上最多能表示231个字符,完全可以涵盖一切语言所用的符号。BMP字符的Unicode编码表示为U+hhhh,其中每个h 代表一个十六进制数位。与UCS-2编码完全相同。

对应的4字节UCS-4编码后两个字节一致,前两个字节的所有位均为0。

五:Unicode字符平面映射

目前的Unicode 字符分为17 组编排, 每组称为平面(Plane),而每平面拥有65536(即216)个代码点。然而目前只有少数平面被使用。

平面始末字符值中文名称英文名称

0号平面U+0000 - U+FFFF 基本多文种平面Basic Multilingual Plane, 简称BMP

1号平面U+10000 - U+1FFFF 多文种补充平面Supplementary Multilingual Plane, 简称SMP

2号平面U+20000 - U+2FFFF 表意文字补充平面Supplementary Ideographic Plane, 简称SIP

3号平面U+30000 - U+3FFFF 表意文字第三平面Tertiary Ideographic Plane, 简称TIP

4号平面

13号平面U+40000 - U+DFFFF 尚未使用

14号平面U+E0000 - U+EFFFF 特别用途补充平面Supplementary Special-purpose Plane, 简称SSP

15号平面U+F0000 - U+FFFFF 保留作为私人使用区Private Use Area, 简称PUA

16号平面U+100000 - U+10FFFF 保留作为私人使用区Private Use Area

Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。

自己总结:由平面看出,现在只是用了3个字节。

六:通用字符集UCS ISO10646

1.通用字符集(Universal Character Set,UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。

2.通用字符集是所有包括了其他字符集。它保证了与其他字符集的双向兼容,即,如果你将任何文本字符串翻译到UCS格式,然后再翻译回原编码,你不会丢失任何信息。

3.ISO/IEC 10646定义了一个31位的字符集。

4.UCS不仅给每个字符分配一个代码,而且赋予了一个正式的名字。表示一个UCS或Unicode 值的十六进制数通常在前面加上“U+”,例如“U+0041”代表字符“A”。

历史上存在两个独立的尝试创立单一字符集的组织,即国际标准化组织(ISO)和多语言软件制造商组成的统一码联盟。前者开发的ISO/IEC 10646 项目,后者开发的统一码项目。因此最初制定了不同的标准。

1991年前后,两个项目的参与者都认识到,世界不需要两个不兼容的字符集。于是,它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode 2.0开始,Unicode采用了与ISO 10646-1相同的字库和字码;ISO也承诺,ISO 10646将不会替超出U+10FFFF的UCS-4编码赋值,以使得两者保持一致。两个项目仍都存在,并独立地公布各

自的标准。但统一码联盟和ISO/IEC JTC1/SC2都同意保持两者标准的码表兼容,并紧密地共同调整任何未来的扩展。

在Unicode和ISO/IEC 10646两个标准中,虽然两者部分样例字形有显著的区别,所有的字符都在相同的位置并且有相同的名字。ISO/IEC 10646-1标准使用四种不同的风格来显示中(繁、简)、日、韩文字,但Unicode的表中,只用简体中文风格来显示,像“Unicode对日本用户来说不可接受”的误解,便由此产生。

其实,上文已说明,ISO/IEC 10646或Unicode都只是编码标准,并不处理字形风格标准之问题。字形的风格可以透过改变显示字体来解决。

七:GB2312-80简体中文字符集

在计算机中英文可以使用 ASCII 码来表示,而汉字使用的是扩展 ASCII 码,并且使用两个扩展 ASCII 码来表示一个汉字。一个 ASCII 码使用一个字节表示,所谓扩展 ASCII 码,也就是 ASCII 码的最高位是1的 ASCII 码,简单的说就是码值大于等于 128 的 ASC II 码。一个汉字由两个扩展 ASCII 码组成,第一个扩展 ASCII 码用来存放区码,第二个扩展ASCII 码用来存放位码。在 GB2312-80 标准中,将所有的汉字分为94个区,每个区有94个位可以存放94个汉字,形成了人们常说的区位码,这样总共就有 94*94=8836 个汉字。在点阵字库中,汉字点阵数据就是按照这个区位的顺序来存放的,也就是最先存放的是第一个区的汉字点阵数据,在每一个区中又是按照位的顺序来存放的。在汉字的编码中,汉字区位码的存放是在扩展 ASCII 基础上存放的,并且将区码和位码都加上了32,然后存放在两个扩展 ASCII 码中。具体的说就是:

第一个扩展ASCII码 = 128+32 + 汉字区码

第二个扩展ASCII码= 128+32 + 汉字位码

如果用char hz[2]来表示一个汉字,那么我可以计算出这个汉字的区位码为:区码 = hz[0] - 128 - 32 = hz[0] - 160

位码 = hz[1] - 128 - 32 = hz[1] - 160。

这样,我们可以根据区位码在文件中进行寻址了,寻址公式如下:

汉字点阵数据在字库文件中的偏移 = ((区码-1) * 94 + 位码) * 一个点阵字模占用的字节数。在寻址以后,即可读取汉字的点阵数据到缓冲区进行显示了。

相关主题
相关文档
最新文档