Unicode,CJK与字体

九月 16th, 2008

ASCII编码了英文环境的128个符号,而Unicode则是把这个星球上所有人类使用的符号统一编了一个号,所有人只需使用其中一个子集,中文被包含在其中称为CJK的部分,CJK是中国日本韩国的意思,三国文字中字形相同的汉字编码也是一样的。CJK中的符号又根据常用与否又分为
# CJK Compatibility
# CJK Compatibility Forms
# CJK Compatibility Ideographs
# CJK Compatibility Ideographs Supplement
# CJK Radicals Supplement
# CJK Strokes
# CJK Symbols and Punctuation
# CJK Unified Ideographs
# CJK Unified Ideographs Extension A
# CJK Unified Ideographs Extension B
等几个子集。
其中CJK Unified Ideographs包涵了两万多常用汉字,是中文显示最主要的部分。
可以把Unicode想象成一张大表,在其中放着这个星球上的每一个符号和与之对应32位数字索引,32位索引意味着这张表可以容纳2的32次方也就是40多亿个符号,这基本可以包括任何人脑想象得出来的符号。但直接用这个索引来标明符号的缺点是冗余太大,一个英文字母用ASCII码表示只需8位,但Unicode需要32位。于是就产生了很多编码方式,如UTF8,UTF16等(包括中国的GB18030也最终映射到了Unicode表),编码的宗旨就是给常用的符号分配短一点的码位,不常用的分配长一点的,以减少冗余。
存放在磁盘上的文本文件,都是按照某种方式编码后的数据,要最终把这些文字显示出来,首先要用对应的编码方式解码,找到那个字符在Unicode中的编号,然后显示其对应的图形,这时候就要用到字体文件了,字体文件中保存这符号的图形,因此体积相对会很大,一种字体文件一般不会包含所有的Unicode字符图形,而只是其中针对某一种语言的子集。
http://www.alanwood.net/unicode/unicode_samples.html打开这个网页,显示的方框就是你系统上没有装对应字体的Unicode字符,这个Win平台的小工具可以查看Unicode和字体文件的信息。http://www.babelstone.co.uk/Software/BabelMap.html


如图显示,CJK Unified Ideographs共有20932个符号,微软雅黑字体中包含了其中20909个,比其它字体都要多一些。而CJK Unified Ideographs Extension中6582个稀奇古怪的汉字雅黑也全部把他们实现了,其他字体如宋体却只实现了 52个,至于CJK Strokes则根本没有字体文件实现了其中的符号,所以也不知道它们是什么样的,它们的编号从U+31C0到U+31EF只需16位,还在Unicode中最基本的BMP平面上,据说是为了方便GB18030映射到Unicode引入的。

另外Windows自带了一个charmap程序,可以用来查看字符映射的信息。还可以在记事本中按住Alt+Unicode码输入符号。

Linux控制台下(没有启动X)可用unicode_start开启unicode模式,也可以用Alt+Unicode码输入符号。

Leave a Reply