查看: 97873|回复: 72

[经验分享] 关于电脑字符集以及生僻字问题的点滴知识

[复制链接]

352

主题

42

好友

1万

积分

版主

Rank: 12Rank: 12Rank: 12

金币
1000
经验
18025
精华
65533
主题
352
帖子
16454
发表于 2011-11-16 16:47:34 |显示全部楼层
常常有网友要求输入法增加某某字符或者符号,实际上作为输入法却是无能为力真正解决这样的问题。
这个要从电脑显示汉字的原理谈起。

电脑作为一种由数字电路组成的机器,它唯一能明白的是0和1这两种电平状态。为了让它能够用文字与人类交流,人们发明了编码。编码就是用一组0或1数字表示一个字符。然而,编码仅仅解决了电脑理解人类字符的问题,人类如何理解电脑的语言?总不能一边看着满屏幕的0和1,一边翻字典查查这一串二进制数字是什么意思吧?于是乎,人们有发明了一套办法将数字表示的编码(称为内码)显示到屏幕上、打印到纸上。这套办法简单的说,就是电脑里面放了一种字典(称为字形文件),它能根据内码查找到相应的文字字符形状,并按照这个形状显示在屏幕上或者打印在纸上。不同的字形文件可以将同一个内码解释为不同的字符,你用word打几个英文字母,然后使用不同的字体试试(比如切换Arial和Wingdings两种字体看看),你会发现原来的abcd会变成奇怪的卡通符号……

内码有很多种不同的标准,一套内码标准能够表示某个范围的字符集合,也被称为字符集。(严格地说,字符集不仅仅是内码,还包括字形部分的定义。)

最早的一种内码叫做ANSI码,也叫ASCII码(美国信息互换标准代码),一看就知道是美国人所制定的。它是用8位二进制数字(1个字节)为一组的编码对应52个大小写英文字母以及数字还有*&#等等符号,最多可以代表256个符号。这对于英文来说,基本上够用了,所以这套编码统治了只用英文的计算机世界很多年。

但是,对于汉字来说,这套容量仅仅256个字符的编码远远不够了,小**至少也得掌握2500个常用字呢!于是自然而然的,就有人想到用16位二进制数字(2个字节)来扩展编码系统。各个国家和地区在ANSI码的基础上又设计了各种不同的非拉丁字符编码集,以能够处理大数量的非拉丁字符(如汉字、日文等等)。这些编码使用单字节来表示ANSI的英文字符(即兼容ANSI码),使用双字节来表示汉字字符。不同的标准组织制定了不同的双字节编码集,例如我国1980年颁布了《信息交换用汉字编码字符集—基本集》,标准代号是GB2312-80,所以这套编码又被称为GB码或者“国标码”。GB2312字符集包含6763个汉字集,涵盖了大陆、新加坡正在使用的大多数汉字。而我国台湾地区则针对繁体字系统编制了BIG5码字符集。由于一个系统中只能有一种汉字内码,不能识别其它汉字内码的字符,造成了交流的不便。用一种内码表示的文字到了另外一种内码系统下就可能变成所谓的“乱码”。要想体验一下乱码,可以用IE随意打开一个简体中文网页,然后点菜单-查看-编码-其他,选择繁体中文(Big5)。

GB2312字符集包含了6763个汉字,日常使用基本上足够了,但是遇到古文、人名、地名中的生僻字就不够用了,很多的繁体字也没有收录。于是,汉字字符集要进行扩展。GBK码就是对GB2312码的扩展字符编码,对多达2万多的简繁汉字进行了编码。该编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。微软的简体版Windows95和Windows98都是使用GBK作系统内码。现在的搜狗拼音输入法也是支持GBK字符集的。

再后来,GBK字符集支持的2万多汉字还是不够用,那就继续扩展。2000年,我国颁布了国家标准GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,2005年又升级为GB18030-2005。GB18030的总可容纳空间超过150万个码位,GB18030-2000收录了27533个汉字,GB18030-2005收录了70244个汉字。另外,1993年我国颁布了收纳2万多汉字的GB 13000.1-1993标准,但是由于该标准不能兼容广泛使用GB2312标准,所以很少被应用在计算机系统上。

前面我们讨论的仅仅是汉字的字符集,实际上在ANSI码之后,很多非英语国家都在制定支持自己语言的字符集,如日文、俄文、朝鲜文、希腊文、阿拉伯文等等。由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便,特别是随着因特网的流行,这种跨语言的交流越来越多。因此,产生了Unicode字符集。Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode用数字0-0x10FFFF来映射字符,最多可以容纳1114112个字符。当然,这么多码位还没有全部用完,随着Unicode的不断改进和完善,支持的字符也越来越多,2006年7月颁布的最新版本的 Unicode 是5.0版本。其中,中文字符主要位于4E00-9FBF范围,支持CJK 统一表意符号(CJK代表中日韩,也就是传统汉字文化圈的代表),另外还有后来扩展的几个区块定义了CJK 笔画、易经六十四卦符号、CJK 统一表意符号扩展、CJK 兼容象形文字等等……目前Unicode超大字符集包括七万多中日韩汉字。

*****华丽的分割线*******

好,上面简略介绍了字符集的相关知识,下面我们讨论一下生僻字、特殊符号、自造字的问题。

如果有人想要增加一个生僻字,并且想要在所有场所能够正常显示,那真还不是一个很简单的事情。前面说到了,字符的显示与内码和字形文件都有关。一个生僻字能否在屏幕上正常显示,首先必须是电脑系统能够接受这个内码,知道这个内码代表的是什么符号,其次需要有相应的字形文件告诉电脑显示成什么样子。例如,在windows98系统下,由于系统只支持GBK字符集,那么如果输入GBK字符集以外的字符,那么系统就会“糊涂”了,不知道这个内码代表什么东东,也不知道该怎样显示,它只好用一个空白的方框代表这个未知的字符。这时候如果给系统额外安装一套支持文件,例如“方正超大字符集”就能正常显示了。甚至有些生僻字都找不到已有的支持文件,那么就只能临时用windows自带的一个小工具“造字程序”来“画出”这个字的字形。显然,包含这个临时造字的文件传递到别的电脑上就无法正常显示和打印出来了。

汉字总共有多少字?到目前为止,恐怕没人能够答得上来精确的数字。据估计,汉字数量达到11万左右。那一般电脑能够显示多少个汉字呢?以简体Windows系统为例,XP默认可显示汉字字数为GBK的21885个字符(含符号),Vista默认可显示汉字字数为GB18030-2000的27533个汉字,Win7默认可显示汉字字数为GB18030-2005的70244个汉字。目前我所知的超大字符集支持文件最大可以支持7.5万多汉字。

前面谈到的各种字符集标准都是国际或者国家标准化组织在广泛征求意见的基础上进行编制,并由权威部门颁布实施的。例如我国就规定在中华人民共和国境内销售的各种电脑硬件必须支持GB18030标准。如果个人或者某公司想要制定一些字符集标准定义,又没有取得标准化组织的认可,那实质上是行不通的。可以想象,由于这些个人或者公司字符集标准没有被权威采纳广泛实施,那么即使某些字符能够在这台电脑上显示,换一台电脑还是一个空白方框。更严重的,如果各家公司都私自制定和发布这样的字符集定义,那么很可能会造成在这台电脑上显示为A字符,到另外一台电脑上却显示为B字符了,那岂不是乱套了吗?

(原创文章,欢迎转载,请标注来源)
有问题请先看置顶帖:搜狗拼音输入法常见问题问答

352

主题

42

好友

1万

积分

版主

Rank: 12Rank: 12Rank: 12

金币
1000
经验
18025
精华
65533
主题
352
帖子
16454
发表于 2011-11-16 16:54:33 |显示全部楼层
这个帖子被误删除了,现在根据记录重新整理贴出来,大家的回帖也没有了,抱歉!
有问题请先看置顶帖:搜狗拼音输入法常见问题问答
回复

使用道具 举报

352

主题

42

好友

1万

积分

版主

Rank: 12Rank: 12Rank: 12

金币
1000
经验
18025
精华
65533
主题
352
帖子
16454
发表于 2011-11-16 17:31:46 |显示全部楼层
本帖最后由 风荷晚香 于 2016-9-8 17:28 编辑

Unicode 的编码和实现(转)
      Unicode统一码万国码单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。
     Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standard,目前第五版由Addison-Wesley Professional出版,ISBN-10: 0321480910)对外发表。
     2006年6月的最新版本的 Unicode 是 2005年3月31日推出的Unicode 4.1.0 。另外,5.0 Beta于2005年12月12日推出,5.2版本(unicode standard)于2009年10月1日正式推出,以供各会员评价。
Unicode 的编码和实现
大概来说,Unicode 编码系统可分为编码方式和实现方式两个层次。
1.编码方式
     Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
     Unicode字符集可以简写为UCS(Unicode Character Set)。早期的Unicode标准有UCS-2、UCS-4的说法。UCS-2用两个字节编码,UCS-4用4个字节编码。UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个平面(plane)。每个平面根据第3个字节分为256行 (row),每行有256个码位(cell)。group 0的平面0被称作BMP(Basic Multilingual Plane)。将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。
     每个平面有2^16=65536个码位。Unicode计划使用了17个平面,一共有17*65536=1114112个码位。在Unicode 5.0.0版本中,已定义的码位只有238605个,分布在平面0、平面1、平面2、平面14、平面15、平面16。其中平面15和平面16上只是定义了两个各占65534个码位的专用区(Private Use Area),分别是0xF0000-0xFFFFD和0x100000-0x10FFFD。所谓专用区,就是保留给大家放自定义字符的区域,可以简写为PUA。
     平面0也有一个专用区:0xE000-0xF8FF,有6400个码位。平面0的0xD800-0xDFFF,共2048个码位,是一个被称作代理区(Surrogate)的特殊区域。代理区的目的用两个UTF-16字符表示BMP以外的字符。在介绍UTF-16编码时会介绍。
     如前所述在Unicode 5.0.0版本中,238605-65534*2-6400-2408=99089。余下的99089个已定义码位分布在平面0、平面1、平面2和平面14上,它们对应着Unicode目前定义的99089个字符,其中包括71226个汉字。平面0、平面1、平面2和平面14上分别定义了52080、3419、43253和337个字符。平面2的43253个字符都是汉字。平面0上定义了27973个汉字。
2.实现方式
     在Unicode中:汉字“字”对应的数字是23383。在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32。UTF是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。例如,“汉字”对应的数字是0x6c49和0x5b57,而编码的程序数据是:
      BYTE data_utf8[] = {0xE6, 0xB1, 0x89, 0xE5, 0xAD, 0x97}; // UTF-8编码
      WORD data_utf16[] = {0x6c49, 0x5b57};   // UTF-16编码
      DWORD data_utf32[] = {0x6c49, 0x5b57}; // UTF-32编码
     这里用BYTE、WORD、DWORD分别表示无符号8位整数,无符号16位整数和无符号32位整数。UTF-8、UTF-16、UTF-32分别以BYTE、WORD、DWORD作为编码单位。“汉字”的UTF-8编码需要6个字节。“汉字”的UTF-16编码需要两个WORD,大小是4个字节。“汉字”的UTF-32编码需要两个DWORD,大小是8个字节。根据字节序的不同,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。下面介绍UTF-8、UTF-16、UTF-32、字节序和BOM。
UTF-8
UTF-8以字节为单位对Unicode进行编码。从Unicode到UTF-8的编码方式如下:
Unicode编码(16进制) ║ UTF-8 字节流(二进制)
000000 – 00007F    ║ 0xxxxxxx
000080 – 0007FF    ║ 110xxxxx 10xxxxxx
000800 – 00FFFF    ║ 1110xxxx 10xxxxxx 10xxxxxx
010000 – 10FFFF    ║ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。UTF-8编码的最大长度是4个字节。从上表可以看出,4字节模板有21个x,即可以容纳21位二进制数字。Unicode的最大码位0x10FFFF也只有21位。
例1:“汉”字的Unicode编码是0x6C49。0x6C49在0x0800-0xFFFF之间,使用用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将0x6C49写成二进制是:0110 1100 0100 1001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
例2:Unicode编码0x20C30在0x010000-0x10FFFF之间,使用用4字节模板了:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx。将0x20C30写成21位二进制数字(不足21位就在前面补0):0 0010 0000 1100 0011 0000,用这个比特流依次代替模板中的x,得到:11110000 10100000 10110000 10110000,即F0 A0 B0 B0。
UTF-16
UTF-16编码以16位无符号整数为单位。我们把Unicode编码记作U。编码规则如下:
如果U<0x10000,U的UTF-16编码就是U对应的16位无符号整数(为书写简便,下文将16位无符号整数记作WORD)。
如果U≥0x10000,我们先计算U'=U-0x10000,然后将U'写成二进制形式:yyyy yyyy yyxx xxxx xxxx,U的UTF-16编码(二进制)就是:110110yyyyyyyyyy 110111xxxxxxxxxx。
为什么U'可以被写成20个二进制位?Unicode的最大码位是0x10ffff,减去0x10000后,U'的最大值是0xfffff,所以肯定可以用20个二进制位表示。例如:Unicode编码0x20C30,减去0x10000后,得到0x10C30,写成二进制是:0001 0000 1100 0011 0000。用前10位依次替代模板中的y,用后10位依次替代模板中的x,就得到:1101100001000011 1101110000110000,即0xD843 0xDC30。
按照上述规则,Unicode编码0x10000-0x10FFFF的UTF-16编码有两个WORD,第一个WORD的高6位是110110,第二个WORD的高6位是110111。可见,第一个WORD的取值范围(二进制)是11011000 00000000到11011011 11111111,即0xD800-0xDBFF。第二个WORD的取值范围(二进制)是11011100 00000000到11011111 11111111,即0xDC00-0xDFFF。
为了将一个WORD的UTF-16编码与两个WORD的UTF-16编码区分开来,Unicode编码的设计者将0xD800-0xDFFF保留下来,并称为代理区(Surrogate):
D800-DB7F ║ High Surrogates                 ║ 高位替代
DB80-DBFF ║ High Private Use Surrogates ║ 高位专用替代
DC00-DFFF ║ Low Surrogates                   ║ 低位替代
高位替代就是指这个范围的码位是两个WORD的UTF-16编码的第一个WORD。低位替代就是指这个范围的码位是两个WORD的UTF-16编码的第二个WORD。那么,高位专用替代是什么意思?我们来解答这个问题,顺便看看怎么由UTF-16编码推导Unicode编码。
如果一个字符的UTF-16编码的第一个WORD在0xDB80到0xDBFF之间,那么它的Unicode编码在什么范围内?我们知道第二个WORD的取值范围是0xDC00-0xDFFF,所以这个字符的UTF-16编码范围应该是0xDB80 0xDC00到0xDBFF 0xDFFF。我们将这个范围写成二进制:
1101101110000000 11011100 00000000 - 1101101111111111 1101111111111111
按照编码的相反步骤,取出高低WORD的后10位,并拼在一起,得到
1110 0000 0000 0000 0000 - 1111 1111 1111 1111 1111
即0xe0000-0xfffff,按照编码的相反步骤再加上0x10000,得到0xf0000-0x10ffff。这就是UTF-16编码的第一个WORD在0xdb80到0xdbff之间的Unicode编码范围,即平面15和平面16。因为Unicode标准将平面15和平面16都作为专用区,所以0xDB80到0xDBFF之间的保留码位被称作高位专用替代。
UTF-32
UTF-32编码以32位无符号整数为单位。Unicode的UTF-32编码就是其对应的32位无符号整数。
字节序
根据字节序的不同,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。例如:
Unicode编码 ║ UTF-16LE     ║ UTF-16BE     ║ UTF32-LE     ║ UTF32-BE
0x006C49   ║ 49 6C           ║ 6C 49           ║ 49 6C 00 00 ║ 00 00 6C 49
0x020C30   ║ 43 D8 30 DC ║ D8 43 DC 30 ║ 30 0C 02 00 ║ 00 02 0C 30
那么,怎么判断字节流的字节序呢?Unicode标准建议用BOM(Byte Order Mark)来区分字节序,即在传输字节流前,先传输被作为BOM的字符"零宽无中断空格"。这个字符的编码是FEFF,而反过来的FFFE(UTF-16)和FFFE0000(UTF-32)在Unicode中都是未定义的码位,不应该出现在实际传输中。下表是各种UTF编码的BOM:
UTF编码     ║ Byte Order Mark
UTF-8       ║ EF BB BF
UTF-16LE  ║ FF FE
UTF-16BE  ║ FE FF
UTF-32LE  ║ FF FE 00 00
UTF-32BE  ║ 00 00 FE FF
Unicode 编码范围
注:中文范围 4E00-9FBF:CJK 统一表意符号 (CJK Unified Ideographs)
0000-007F:C0控制符及基本拉丁文 (C0 Control and Basic Latin)
0080-00FF:C1控制符及拉丁文补充-1 (C1 Control and Latin 1 Supplement)
0100-017F:拉丁文扩展-A (Latin Extended-A)
0180-024F:拉丁文扩展-B (Latin Extended-B)
0250-02AF:国际音标扩展 (IPA Extensions)
02B0-02FF:空白修饰字母 (Spacing Modifiers)
0300-036F:结合用读音符号 (Combining Diacritics Marks)
0370-03FF:希腊文及科普特文 (Greek and Coptic)
0400-04FF:西里尔字母 (Cyrillic)
0500-052F:西里尔字母补充 (Cyrillic Supplement)
0530-058F:亚美尼亚语 (Armenian)
0590-05FF:希伯来文 (Hebrew)
0600-06FF:阿拉伯文 (Arabic)
0700-074F:叙利亚文 (Syriac)
0750-077F:阿拉伯文补充 (Arabic Supplement)
0780-07BF:马尔代夫语 (Thaana)
07C0-077F:西非书面语言 (N'Ko)
0800-085F:阿维斯塔语及巴列维语 (Avestan and Pahlavi)
0860-087F:Mandaic
0880-08AF:撒马利亚语 (Samaritan)
0900-097F:天城文书 (Devanagari)
0980-09FF:孟加拉语 (Bengali)
0A00-0A7F:锡克教文 (Gurmukhi)
0A80-0AFF:古吉拉特文 (Gujarati)
0B00-0B7F:奥里亚文 (Oriya)
0B80-0BFF:泰米尔文 (Tamil)
0C00-0C7F:泰卢固文 (Telugu)
0C80-0CFF:卡纳达文 (Kannada)
0D00-0D7F:德拉维族语 (Malayalam)
0D80-0DFF:僧伽罗语 (Sinhala)
0E00-0E7F:泰文 (Thai)
0E80-0EFF:老挝文 (Lao)
0F00-0FFF:藏文 (Tibetan)
1000-109F:缅甸语 (Myanmar)
10A0-10FF:格鲁吉亚语 (Georgian)
1100-11FF:朝鲜文 (Hangul Jamo)
1200-137F:埃塞俄比亚语 (Ethiopic)
1380-139F:埃塞俄比亚语补充 (Ethiopic Supplement)
13A0-13FF:切罗基语 (Cherokee)
1400-167F:统一加拿大土著语音节 (Unified Canadian Aboriginal Syllabics)
1680-169F:欧甘字母 (Ogham)
16A0-16FF:如尼文 (Runic)
1700-171F:塔加拉语 (Tagalog)
1720-173F:Hanunóo
1740-175F:Buhid
1760-177F:Tagbanwa
1780-17FF:高棉语 (Khmer)
1800-18AF:蒙古文 (Mongolian)
18B0-18FF:Cham
1900-194F:Limbu
1950-197F:德宏泰语 (Tai Le)
1980-19DF:新傣仂语 (New Tai Lue)
19E0-19FF:高棉语记号 (Kmer Symbols)
1A00-1A1F:Buginese
1A20-1A5F:Batak
1A80-1AEF:Lanna
1B00-1B7F:巴厘语 (Balinese)
1B80-1BB0:巽他语 (Sundanese)
1BC0-1BFF:Pahawh Hmong
1C00-1C4F:雷布查语(Lepcha)
1C50-1C7F:Ol Chiki
1C80-1CDF:曼尼普尔语 (Meithei/Manipuri)
1D00-1D7F:语音学扩展 (Phonetic Extensions)
1D80-1DBF:语音学扩展补充 (Phonetic Extensions Supplement)
1DC0-1DFF:结合用读音符号补充 (Combining Diacritics Marks Supplement)
1E00-1EFF:拉丁文扩充附加 (Latin Extended Additional)
1F00-1FFF:希腊语扩充 (Greek Extended)
2000-206F:常用标点 (General Punctuation)
2070-209F:上标及下标 (Superscripts and Subscripts)
20A0-20CF:货币符号 (Currency Symbols)
20D0-20FF:组合用记号 (Combining Diacritics Marks for Symbols)
2100-214F:字母式符号 (Letterlike Symbols)
2150-218F:数字形式 (Number Form)
2190-21FF:箭头 (Arrows)
2200-22FF:数学运算符 (Mathematical Operator)
2300-23FF:杂项工业符号 (Miscellaneous Technical)
2400-243F:控制图片 (Control Pictures)
2440-245F:光学识别符 (Optical Character Recognition)
2460-24FF:封闭式字母数字 (Enclosed Alphanumerics)
2500-257F:制表符 (Box Drawing)
2580-259F:方块元素 (Block Element)
25A0-25FF:几何图形 (Geometric Shapes)
2600-26FF:杂项符号 (Miscellaneous Symbols)
2700-27BF:印刷符号 (Dingbats)
27C0-27EF:杂项数学符号-A (Miscellaneous Mathematical Symbols-A)
27F0-27FF:追加箭头-A (Supplemental Arrows-A)
2800-28FF:盲文点字模型 (Braille Patterns)
2900-297F:追加箭头-B (Supplemental Arrows-B)
2980-29FF:杂项数学符号-B (Miscellaneous Mathematical Symbols-B)
2A00-2AFF:追加数学运算符 (Supplemental Mathematical Operator)
2B00-2BFF:杂项符号和箭头 (Miscellaneous Symbols and Arrows)
2C00-2C5F:格拉哥里字母 (Glagolitic)
2C60-2C7F:拉丁文扩展-C (Latin Extended-C)
2C80-2CFF:古埃及语 (Coptic)
2D00-2D2F:格鲁吉亚语补充 (Georgian Supplement)
2D30-2D7F:提非纳文 (Tifinagh)
2D80-2DDF:埃塞俄比亚语扩展 (Ethiopic Extended)
2E00-2E7F:追加标点 (Supplemental Punctuation)
2E80-2EFF:CJK 部首补充 (CJK Radicals Supplement)
2F00-2FDF:康熙字典部首 (Kangxi Radicals)
2FF0-2FFF:表意文字描述符 (Ideographic Description Characters)
3000-303F:CJK 符号和标点 (CJK Symbols and Punctuation)
3040-309F:日文平假名 (Hiragana)
30A0-30FF:日文片假名 (Katakana)
3100-312F:注音字母 (Bopomofo)
3130-318F:朝鲜文兼容字母 (Hangul Compatibility Jamo)
3190-319F:象形字注释标志 (Kanbun)
31A0-31BF:注音字母扩展 (Bopomofo Extended)
31C0-31EF:CJK 笔画 (CJK Strokes)
31F0-31FF:日文片假名语音扩展 (Katakana Phonetic Extensions)
3200-32FF:封闭式 CJK 文字和月份 (Enclosed CJK Letters and Months)
3300-33FF:CJK 兼容 (CJK Compatibility)
3400-4DBF:CJK 统一表意符号扩展 A (CJK Unified Ideographs Extension A)
4DC0-4DFF:易经六十四卦符号 (Yijing Hexagrams Symbols)
4E00-9FBF:CJK 统一表意符号 (CJK Unified Ideographs)
A000-A48F:彝文音节 (Yi Syllables)
A490-A4CF:彝文字根 (Yi Radicals)
A500-A61F:Vai
A660-A6FF:统一加拿大土著语音节补充 (Unified Canadian Aboriginal Syllabics Supplement)
A700-A71F:声调修饰字母 (Modifier Tone Letters)
A720-A7FF:拉丁文扩展-D (Latin Extended-D)
A800-A82F:Syloti Nagri
A840-A87F:八思巴字 (Phags-pa)
A880-A8DF:Saurashtra
A900-A97F:爪哇语 (Javanese)
A980-A9DF:Chakma
AA00-AA3F:Varang Kshiti
AA40-AA6F:Sorang Sompeng
AA80-AADF:Newari
AB00-AB5F:越南傣语 (Vi?t Thái)
AB80-ABA0:Kayah Li
AC00-D7AF:朝鲜文音节 (Hangul Syllables)
D800-DBFF:High-half zone of UTF-16
DC00-DFFF:Low-half zone of UTF-16
E000-F8FF:自行使用区域 (Private Use Zone)
F900-FAFF:CJK 兼容象形文字 (CJK Compatibility Ideographs)
FB00-FB4F:字母表达形式 (Alphabetic Presentation Form)
FB50-FDFF:阿拉伯表达形式A (Arabic Presentation Form-A)
FE00-FE0F:变量选择符 (Variation Selector)
FE10-FE1F:竖排形式 (Vertical Forms)
FE20-FE2F:组合用半符号 (Combining Half Marks)
FE30-FE4F:CJK 兼容形式 (CJK Compatibility Forms)
FE50-FE6F:小型变体形式 (Small Form Variants)
FE70-FEFF:阿拉伯表达形式B (Arabic Presentation Form-B)
FF00-FFEF:半型及全型形式 (Halfwidth and Fullwidth Form)
FFF0-FFFF:特殊 (Specials)
非 Unicode 环境
        在非 Unicode 环境下,由于不同国家和地区采用的字符集不一致,很可能出现无法正常显示所有字符的情况。微软公司使用了代码页(Codepage)转换表的技术来过渡性的部分解决这一问题,即通过指定的转换表将非 Unicode 的字符编码转换为同一字符对应的系统内部使用的 Unicode 编码。可以在“语言与区域设置”中选择一个代码页作为非 Unicode 编码所采用的默认编码方式,如936为简体中文GBK,950为正体中文Big5(皆指PC上使用的)。在这种情况下,一些非英语的欧洲语言编写的软件和文档很可能出现乱码。而将代码页设置为相应语言中文处理又会出现问题,这一情况无法避免。从根本上说,完全采用统一编码才是解决之道,但目前尚无法做到这一点。
代码页技术现在广泛为各种平台所采用。UTF-7 的代码页是65000,UTF-8 的代码页是65001。
XML 和 Unicode
       XML及其子集HTML采用UTF-8作为标准字集,理论上我们可以在各种支持XML标准的浏览器上显示任何地区文字的网页,只要电脑本身安装有合适的字体即可。可以利用&#nnn;的格式显示特定的字符。nnn代表该字符的十进制 Unicode 代码。如果采用十六进制代码,在编码之前加上x字符即可。但部分旧版本的浏览器可能无法识别十六进制代码。
     然而部分由于 Unicode 版本发展原因,很多浏览器只能显示 UCS-2 完整字符集也即现在使用的 Unicode 版本中的一个小子集。下表可以检验您的浏览器怎样显示各种各样的 Unicode 代码:
代码字符标准名称(英语)在浏览器上的显示
65
大写拉丁字母"A"
A
223
小写拉丁字母"Sharp S"
ß
254
小写拉丁字母"Thorn"
t
916
大写希腊字母"Delta"
Δ
1049
大写斯拉夫字母"Short I"
Й
1511
希伯来字母"Qof"
ק
1605
阿拉伯字母"Meem"
م
3671
泰文数字7
4688
埃塞俄比亚音节文字"Qha"
12354
日语平假名"A"
12450
日语片假名"A"
21494
简体汉字"叶"
33865
正体汉字"葉"
50685
韩国音节文字"Yeob"
输入Unicode
       除了输入法外,操作系统会提供几种方法输入Unicode。像是Windows 2000之后的Windows系统就提供一个可点击的表。例如在Microsoft Word或者金山WPS之下,按下 Alt 键不放,输入 0 和某个字符的 Unicode 编码(十进制),再松开 Alt 键即可得到该字符,如Alt + 033865会得到Unicode字符“叶”(繁体)。另外按Alt + X 组合键,MS Word 也会将光标前面的字符同其十六进制的四位 Unicode 编码进行互相转换。
     Unicode 目前已经有5.0版本。世界上有一大批计算机、语言学等科学家专门研究Unicode,到了现在Unicode标准已经不单是一个编码标准,还是记录人类语言文字资料的一个巨大的数据库,同时从事人类文化遗产的发掘和保护工作。
     对于中文而言,Unicode 16编码里面已经包含了GB18030里面的所有汉字(27484个字),目前Unicode标准准备把康熙字典的所有汉字放入到Unicode 32bit编码中。
     简单地说,Unicode扩展自ASCII字元集。在严格的ASCII中,每个字元用7位元表示,或者电脑上普遍使用的每字元有8位元宽;而Unicode使用全16位元字元集。这使得Unicode能够表示世界上所有的书写语言中可能用於电脑通讯的字元、象形文字和其他符号。Unicode最初打算作为ASCII的补充,可能的话,最终将代替它。考虑到ASCII是电脑中最具支配地位的标准,所以这的确是一个很高的目标。
     Unicode影响到了电脑工业的每个部分,但也许会对作业系统和程序设计语言的影响最大。从这方面来看,我们已经上路了。Windows NT从底层支持Unicode(不幸的是,Windows 98只是小部分支援Unicode)。先天即被ANSI束缚的C程序设计语言通过对宽字元集的支持来支持Unicode。
输入方法
中文输入法截至2009年3月,可以使用微软拼音2003或2007版本海峰五笔9.3版本,新注音输入法 和 VimIM 进行输入。
微软拼音 在输入法启动状态下,单击语言栏上的“功能菜单”按钮,指向“辅助输入法”即可发现“Unicode码输入方式”,利用它可以直接输入Unicode相应十六进制值的方式输入相应文字。例如中文“胥”输入“5066”,朝鲜语文字“셅”输入“c145”(不需要在前面加0x或x)。海峰五笔 此输入法已经直接支持透过五笔码输入方式输入Unicode内的任意中日韩汉字,但无法使用键入Unicode码的方式输入。例如汉字(Unicode部分)“㗎”为“keks”,CJK扩展B区的“”为“iyho”和CJK扩展C区的“”为“muih”。新注音输入法 在输入法启动状态时,打入键盘上的“多功能前导字符键”(及通用键盘上之“`”),第一次使用会弹出说明。输入Unicode字符“胥”则是在键盘上键入“`U5066”。而韩语中的“셅”,则输入“`UC145”。而要输入日语自制汉字“卡”,则是“`U5CE0”。VimIM 在 Vim 环境中,可以直接键入十进制或十六进制 Unicode 码。既不需要启动输入法,也不需要码表。
日文输入法使用Microsoft IME 2007,可以在IME PAD里找到UNICODE的点击表。点击字符即可输入。选择字体可以预览字符效果。
其他除了输入法外,操作系统也会提供另外几种方法输入 Unicode。像是Windows 2000之后的 Windows 系统就提供一个可点击的字符映射表。又或者在Microsoft Word下,按下 Alt 键不放,输入 0 和某个字符的 Unicode 编码(十进制),再松开 Alt 键即可得到该字符,如Alt + 033865会得到 Unicode 字符。另外按Alt + X 组合键,MS Word 也会将光标前面的字符同其十六进制的四位 Unicode 编码进行互相转换。
为什么使用Unicode?
       基本上,计算机只是处理数字。它们指定一个数字,来储存字母或其他字符。在创造Unicode之前,有数百种指定这些数字的编码系统。没有一个编码可以包含足够的字符:例如,单单欧州共同体就需要好几种不同的编码来包括所有的语言。即使是单一种语言,例如英语,也没有哪一个编码可以适用于所有的字母,标点符号,和常用的技术符号。这些编码系统也会互相冲突。也就是说,两种编码可能使用相同的数字代表两个不同的字符,或使用不同的数字代表相同的字符。任何一台特定的计算机(特别是服务器)都需要支持许多不同的编码,但是,不论什么时候数据通过不同的编码或平台之间,那些数据总会有损坏的危险。
有问题请先看置顶帖:搜狗拼音输入法常见问题问答
回复

使用道具 举报

352

主题

42

好友

1万

积分

版主

Rank: 12Rank: 12Rank: 12

金币
1000
经验
18025
精华
65533
主题
352
帖子
16454
发表于 2011-11-16 17:33:10 |显示全部楼层
本帖最后由 风荷晚香 于 2011-11-16 17:48 编辑

引用“果壳网”几位网友关于类似问题的讨论(原文地址:http://www.guokr.com/post/65572
stecue:
问题的根源在于,现在的汉语由于电脑编码的广泛使用基本失去了造字能力,导致不能约化为既有概念的全新事物无法进行合适的命名。任何用既有汉字命名的事物都不可避免的受到原有字面意义的影响。比如dinosaur,这东西不能约化为任何既有事物——也就是既有汉字的组合,最好就是新造一个汉字。

最好的例子其实是化学里各种元素以及那么多奇怪的基团或者化合物,比如烷烃、烯烃等等,如果放到现在,根本没法翻译。幸好早期的化学家们赶在汉字编码化之前及时早了一大批汉字,否则我们就得要么用拼音,要么像日文一样用类似假名的注音字母。——当然我觉得那倒的确是一个挺好的一劳永逸的解决方案。


滕子京:
新造一个字‘熵’明明就比叫做‘混合度’简洁、传神、高明得多了。我们要全部使用“物质的量”这样磕巴巴的组合名词,科技论文没法写没法读了。

字母文字造新词很方便,而汉字要是堵死了造字的途径表达能力太受限制,尤其现在涌现的新事物那么多。老祖宗既然能为不同的玉、不同的马创造几十个汉字,我们现在需要表述的事物不知道多了多少个数量级,当然更有理由创造汉字。不然:为什么新事物一定能够被旧有汉字的组合所表达?

赞成造字。放开用户造字,一个新字真正广泛流行起来再进入字典。像新词迭出的英文一样,语言规范不会受到影响,天下也不会大乱的


wildson:
其实从中文的角度来说,古代有个新事物一般是造字而不是造词,现代为了规范汉字,不能顺便造字结果就很多从西方的来的词就这样翻译哦
其实很多都应该像熵那样造字比较合适


Ent:
造字的问题不在于放开不放开,而在于汉字编码系统已经把对应的值域定死了,基础设施决定它造不出来。



草字无厘头:
对新事物,像“熵”这样的新字才是最佳方案,也是一个语言能够不断适应新的要求的保证。可是自从规范汉字以后,特别是用于计算机的汉字编码固定后,基本上关闭了新造汉字的可能性,汉字已经走到了尽头···想想以前学化学,那个“物质的量”实在是让偶纠结不已···
有问题请先看置顶帖:搜狗拼音输入法常见问题问答
回复

使用道具 举报

1

主题

0

好友

91

积分

LV1蓝狐驿丞

Rank: 1

金币
0
经验
91
精华
0
主题
1
帖子
83
发表于 2011-11-18 15:03:59 |显示全部楼层
不错,比较好
gewell.net
回复

使用道具 举报

26

主题

3

好友

2416

积分

LV3白狐州判

Rank: 3Rank: 3Rank: 3

金币
0
经验
2416
精华
0
主题
26
帖子
1721
发表于 2011-11-19 20:35:33 |显示全部楼层
上图,待用:
QQ截图20111119202554.png

点评

兜兜里有蘑菇  请问 11这个ying字是怎么打出来的啊 好困扰啊~~~·  详情 回复 发表于 2014-9-17 13:47
回复

使用道具 举报

1

主题

0

好友

22

积分

LV1蓝狐驿丞

Rank: 1

金币
0
经验
22
精华
0
主题
1
帖子
13
发表于 2011-12-4 21:55:54 |显示全部楼层
我可以把文章转载到http://www.deb.com.cn上不?最近做实验
回复

使用道具 举报

0

主题

0

好友

4

积分

LV1蓝狐驿丞

Rank: 1

金币
0
经验
4
精华
0
主题
0
帖子
1
发表于 2011-12-4 23:42:43 |显示全部楼层
6# 234

14、瓅 的简体字    怎么弄的   可以复制一个

点评

yjf_victor  “瓅”的简体字是“?”,能不能正常显示就看你的电脑有没有这个字库了。  发表于 2013-7-7 01:31
回复

使用道具 举报

0

主题

0

好友

94

积分

LV1蓝狐驿丞

Rank: 1

金币
0
经验
94
精华
0
主题
0
帖子
59
发表于 2011-12-10 09:09:02 |显示全部楼层
学习了  谢谢分享
回复

使用道具 举报

0

主题

0

好友

5

积分

LV1蓝狐驿丞

Rank: 1

金币
0
经验
5
精华
0
主题
0
帖子
1
发表于 2011-12-12 22:13:17 |显示全部楼层
瓅的简体字怎么弄的,求解答

点评

yjf_victor  “瓅”的简体字是“?”,能不能正常显示就看你的电脑有没有这个字库了。  发表于 2013-7-7 01:31
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部

搜狗 ( 京ICP证050897号) |Archiver|WAP|联系我们: |

© 2001-2018 Comsenz Inc. 隐私政策