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

时间:2021-07-19 07:09:29

【中文字符编码标准】

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 437 original IBM PC
Code Page==USA
Code Page 720 Arabic
Code Page 737 Greek
Code Page 775 Estonian, 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 855 Cyrillic
Code Page 857 Turkish
Code Page 858 "Multilingual" with euro symbol
Code Page 860 Portuguese
Code Page 861 Icelandic
Code Page 862 Hebrew
Code Page 863 French (Quebec French)
Code Page 865 Danish/Norwegian Differs from 437
Code Page 869 Greek
Code Page 874 Thai


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

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


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

代码页Code Page 对应的字符集Character Set
Code Page 1200 UTF-16LE Unicode little-endian
Code Page 1201 UTF-16BE Unicode big-endian
Code Page 65000 UTF-7 Unicode
Code Page 65001 UTF-8 Unicode
Code Page 10000 Macintosh Roman encoding (followed by several other Mac character sets)
Code Page 10007 Macintosh Cyrillic encoding
Code Page 10029 Macintosh Central European encoding
Code Page 20127 US-ASCII The classic US 7 bit character set with no char larger than 127
Code Page 28591 ISO-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 1250 Central and East European Latin
Code Page 1251 Cyrillic
Code Page 1252 West European Latin
Code Page 1253 Greek
Code Page 1254 Turkish
Code Page 1255 Hebrew
Code Page 1256 Arabic
Code Page 1257 Baltic
Code Page 1258 Vietnamese
Code Page 874 Thai


上述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