免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9046 | 回复: 4

[驱动] 中文字符编码标准+Unicode+Code Page [复制链接]

论坛徽章:
0
发表于 2011-10-21 16:45 |显示全部楼层
本帖最后由 crifan 于 2011-10-21 16:50 编辑

中文字符编码标准+Unicode+Code Page

Version: 2011-10-21

Author: crifan

Mail: green-waste (at) 163.com


PDF版本: 中文字符编码标准 Unicode Code Page.pdf (357.95 KB, 下载次数: 222)

【中文字符编码标准】

1. GB2312,CP936,GBK,GB18030,GB13000

(1) GB2312

1980年,中国制定了GB2312-80,一共收录了 7445 个字符,包括 6763 个汉字和 682 个其它符号。

GB2312-80,简称为GB2312。

在 Windows 中的代码页(Code Page)是 CP936。


(2)GB13000

1993年,国际标准Unicode 1.1版本推出,收录中国大陆、台湾、日本及韩国通用字符集的汉字,总共有20,902个。

中国大陆订定了等同于Unicode 1.1版本的“GB 13000.1-93”,简称为GB13000。


GB13000,显然包含的GB2312已有的文字和其他很多为包含的文字,如GB 2312-80推出以后才简化的汉字(如“啰”),部分人名用字(如中国前总理朱镕基的“镕”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等。


(3)GBK

微软,对GB2312-80的扩展,即利用GB 2312-80未使用的编码空间,收录所有的GB 13000.1-93和Unicode 1.1之中的汉字全部字符,制定了GBK编码。

GBK 收录了 21886 个符号,它分为汉字区和图形符号区。汉字区包括 21003 个字符。


GBK 作为对 GB2312 的扩展,在现在的 Windows 系统中仍然使用代码页 CP936 表示,但是同样的 936 的代码页跟一开始的 936 的代码页只支持 GB2312 编码不同,现在的 936 代码页支持 GBK 的编码,GBK 同时也向下兼容GB2312 编码。


所以,技术编码上,GBK兼容旧的GB2312,但是编码方式和GB13000不同,不兼容GB13000,但是所包含文字上,算是和GB13000相同。


(4)GB18030

GBK自身并非国家标准,只是曾由国家技术监督局标准化司、电子工业部科技与质量监督司公布为“技术规范指导性文件”。

原始GB13000一直未被业界采用,2000年,国家出了标准GB18030-2000,简称GB18030,技术上兼容GBK而非GB13000,取代了 GBK1.0,成了正式的国家标准。

该标准收录了 27484 个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。

现在的PC平台必须支持 GB18030 ,对嵌入式产品暂不作要求。所以手机、MP3 一般只支持 GB2312。

GB18030 在 Windows 中的代码页是 CP54936。


这么多汉字编码标准的关系,总结起来就是:

2. 各种中文字符编码标准的关系


中国大陆的标准)GB 13000.1-93 =(国际标准)Unicode 1.1


(中国大陆标准)GB2312-80

= 简称GB2312

= Windows系统中的
原先的CP936


(微软制定的)GBK

= (微软在编码方面)对
GB2312 的扩展

= (微软在所包含字符方面上包含了)
GB 13000.1-93 + 其他部分汉字+ 台湾和香港的繁体 + 日语 + 朝鲜汉字

=
Unicode 1.1 + 其他部分汉字+ 台湾和香港的繁体 + 日语 + 朝鲜汉字


对于GBK:

ð
在编码方面:向下兼容GB2312,但是和GB 13000不同

ð
在内容方面:等价于GB13000


微软中
现在的新的CP936

= GBK

=兼容旧的GB2312


在技术编码方面上,演化顺序为,ASCII
-> GB2312 -> GBK -> GB18030。

后者对之前的,都是支持之前的编码,即向下兼容,即同一个字符,在这些编码中,都是同样的值,后面的标准,支持更多的字符。

区分中文编码的方法是高字节的最高位不为 0

按照程序员的称呼,GB2312GBK GB18030 都属于双字节字符集 (DBCS)

图表
1 中文字符相关编码标准

编码标准别名标准所属包含字符
ASCII国际通用
GB2312微软Windows中以前的CP936中国大陆6763 个汉字和 682 个其它符号
Unicode 1.1国际通用20,902个字符
GB13000中国大陆20,902个字符
GBK微软Windows中现在的CP936微软21886 个符号
GB18030微软Windows中的CP54936中国大陆27484 个汉字+其他少数民族字符



【Unicode

世界上有很多个国家(和地区),每个国家都有自己对应的字符编码。

如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言。

在这种语言环境下,不会再有语言的编码冲突,在同屏下,可以显示任何语言的内容,这就是Unicode的最大好处。

那么Unicode是如何编码的呢?其实非常简单。

就是将世界上所有的文字用2个字节统一进行编码。可能你会问,2个字节最多能够表示65536个编码,够用吗?

韩国和日本的大部分汉字都是从中国传播过去的,字型是完全一样的。

比如:“文”字,GBK和SJIS中都是同一个汉字,只是编码不同而已。

那样,像这样统一编码,2个字节就已经足够容纳世界上所有的语言的大部分文字了。

Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。

现在用的是UCS-2,即2个字节编码,而UCS-4是为了防止将来2个字节不够用才开发的。UCS-2也称为基本多文种平面。

UCS-2转换到UCS-4只是简单的在前面加2个字节0。UCS-4则主要用于保存辅助平面,例如Unicode 4.0中的第二辅助平面:

20000-20FFF - 21000-21FFF - 22000-22FFF - 23000-23FFF - 24000-24FFF - 25000-25FFF -   26000-26FFF - 27000-27FFF - 28000-28FFF - 29000-29FFF - 2A000-2AFFF - 2F000-2FFFF

总共增加了16个辅助平面,由原先的65536个编码扩展至将近100万编码。



【Code Page

那么既然统一了编码,如何兼容原先各国的文字编码呢?

这个时候就需要codepage了。

什么是codepage?codepage就是各国的文字编码和Unicode之间的映射表。

而目前现存的有多个厂家,都为对应的不同的字符集,定义了对应的Code Page。


下面列出来常见的Code Page:

图表
2 IBM PC (OEM)的 Code Page

代码页Code Page对应的字符集Character Set
Code Page 437original IBM PC
Code Page==USA
Code Page 720Arabic
Code Page 737Greek
Code Page 775Estonian, Lithuanian and Latvian
Code Page 850"Multilingual (Latin-1)" (Western European languages)
Code Page 852"Slavic (Latin-2)" (Central and Eastern European languages)
Code Page 855Cyrillic
Code Page 857Turkish
Code Page 858"Multilingual" with euro symbol
Code Page 860Portuguese
Code Page 861Icelandic
Code Page 862Hebrew
Code Page 863French (Quebec French)
Code Page 865Danish/Norwegian Differs from 437
Code Page 869Greek
Code Page 874Thai



图表
3 DBCS字符集所对应的Code Page

代码页Code Page对应的字符集Character Set
Code Page 932Japanese
Code Page 936GBK - Simplified Chinese
Code Page 949Korean
Code Page 950BIG5 - Traditional Chinese



图表
4 微软的其他字符编码的Code Page

代码页Code Page对应的字符集Character Set
Code Page 1200UTF-16LE Unicode little-endian
Code Page 1201UTF-16BE Unicode big-endian
Code Page 65000UTF-7 Unicode
Code Page 65001UTF-8 Unicode
Code Page 10000Macintosh Roman encoding (followed by several other Mac character sets)
Code Page 10007Macintosh Cyrillic encoding
Code Page 10029Macintosh Central European encoding
Code Page 20127US-ASCII The classic US 7 bit character set with no char larger than 127
Code Page 28591ISO-8859-1 (followed by ISO-8859-2 to ISO-8859-15)


微软自己定义了一系列的Code Page,称为ANSI Code Page。

起初,CP1252是基于ANSI的draft版本的,而ANSI后来演化为称为ISO 8859-1,所以,算是CP1252是基于ISO 8859-1的,但是将ISO 8859-1中的C1 Control Code用作为扩展的可打印字符。

图表
5 微软的ANSI Code Page

代码页Code Page对应的字符集Character Set
Code Page 1250Central and East European Latin
Code Page 1251Cyrillic
Code Page 1252West European Latin
Code Page 1253Greek
Code Page 1254Turkish
Code Page 1255Hebrew
Code Page 1256Arabic
Code Page 1257Baltic
Code Page 1258Vietnamese
Code Page 874Thai



上述Code Page中,我们比较常见一些的有:

简体中文是CP936,繁体中文是CP950,UTF-8是65001等。



【引用】

什么是Unicode?什么是UTF-8?

http://www.bianceng.cn/web/Html/200710/4839.htm


Code Page

http://en.wikipedia.org/wiki/Code_page


什么是字符集、编码、代码页(code page)

http://zhidao.baidu.com/question/43462968


GBK

http://zh.wikipedia.org/wiki/GBK


中文编码 GB2312||GBK||GB18030||GB13000 详解

http://www.satsuns.com/ci/1373.html

评分

参与人数 1可用积分 +10 收起 理由
bitmilong + 10 原创内容

查看全部评分

论坛徽章:
0
发表于 2011-10-21 16:48 |显示全部楼层
上述贴出来的内容,是从word 2007中另存为htm后,从htm拷贝粘贴过来的。
由于bbs支持不好,导致格式很乱。

对于用htm而不用word本身,那是因为,同样的内容,如果是从word 2007中拷贝粘贴过来,会由于实际内容超过20000字符而无法发表,所以才导出为htm再拷贝粘贴的。

论坛徽章:
0
发表于 2011-10-25 16:22 |显示全部楼层
回复 2# crifan


    我试了几种方法,都没啥改善,这边正在准备升级discuz到X2,完后应该好点,但不可能完美。

论坛徽章:
0
发表于 2011-10-26 11:48 |显示全部楼层
这个东西有帮助

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
发表于 2011-11-07 22:32 |显示全部楼层
18030有部分是四字节
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP