稍微研究了一下,总结在下:
一、什么是字符集
字符集:GB2312、GBK,GB18030和万国码(Unicode)等,这都是常见的中文字符集。所谓的字符集,形象一点理解就是某个值与某个中文字的映射,而每个字符集都有自己不同的映射关系。兴趣个最简单的例子,ASCII码。可见,字符集都是人们规定出来的,本身必须通过某些标准发布并且被广泛使用才有意义。
二、常见的字符集
1)ASCII码:American Standard Code for Information Interchange,美国信息交换标准代码。大家最常使用的编码了,收录128个字符,包括95个可见字符和33个控制字符。总的来说,只能够支持英文。
2)GB2312:GB2312或 GB2312-80是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集?基本集》,又称GB0。是第一个版本的简体中文字符集。GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。但对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现。总的来说,是支持字符最少的简体中文字符集。
3)GBK:GBK即汉字内码扩展规范,K为汉语拼音 Kuo Zhan(扩展)中“扩”字的声母。英文全称Chinese Internal Code Specification。由于GB2312-80只收录6763个汉字,有不少汉字,并未有收录在内。于是厂商微软利用GB2312-80未使用的编码空间,收录GB13000.1-93全部字符制定了GBK编码。根据微软资料,GBK是对GB2312-80的扩展,也就是CP936字码表 (Code Page 936)的扩展(之前CP936和GB2312-80一模一样),最早实现于Windows 95简体中文版。虽然GBK收录GB13000.1-93的全部字符,但编码方式并不相同。原始GB13000一直未被业界采用,后续国家标准GB18030技术上兼容GBK而非GB13000。总的来说,GBK是微软根据GB13000所收录的字符,在GB2312的基础上扩展而来的,但其编码方式和GB13000不一样,而后续的国家标准GB18030事实上兼容GBK而不是GB13000,所以GB13000只是一个未被业界使用的字符集,而GBK才真正成为了标准。
4)GB18030:全称:国家标准GB18030-2005《信息技术 中文编码字符集》,是中华人民共和国现时最新的内码字集,是GB18030-2000《信息技术 信息交换用汉字编码字符集 基本集的扩充》的修订版。与GB 2312-1980完全兼容,与GBK基本兼容,支持GB 13000及Unicode的全部统一汉字,共收录汉字70244个。总的来说,现时最新的中国内码字符集,与GB2312与GBK等都兼容,并且支持Unicode的全部统一汉字。
5)Unicode:(统一码、万国码、单一码、标准万国码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简化地方式来呈现和处理文字。Unicode依随着通用字符集(Universal Character Set,UCS)的标准而发展,同时也以书本的形式对外发表。总的来说,Unicode的目标是为世界上的每一个字符建立一套统一的编码体系,这其中当然包括对中文字符的支持。
现在用的是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万编码。
那么既然统一了编码,如何兼容原先各国的文字编码呢?
这个时候就需要codepage了。
什么是codepage?codepage就是各国的文字编码和Unicode之间的映射表。
比如简体中文和Unicode的映射表就是CP936,点这里查看官方的映射表。
以下是几个常用的codepage,相应的修改上面的地址的数字即可。
codepage=936 简体中文GBK
codepage=950 繁体中文BIG5
codepage=437 美国/加拿大英语
codepage=932 日文
codepage=949 韩文
codepage=866 俄文
codepage=65001 unicode UFT-8
三、Unicode的编码方式和实现方式
大概来说,Unicode编码系统可分为编码方式和实现方式两个层次。
编码方式:
10646的通用字符集概念相对应。目前实际应用的统一码版本对应于UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示2的16次方(即65536)个字符。基本满足各种语言的使用。实际上当前版本的统一码并未完全使用这16位编码,而是保留了大量空间以作为特殊使用或将来扩展。
实现方式:
Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(UnicodeTransformation Format,简称为UTF)。常见的实现方式有UTF-8、UTF-16等。
所以,总的来说,我们常用到的UTF与Unicode的关系是,UTF是Unicode编码方式的实现方式。Unicode字符集本身只是一个编码与字符的对应关系表而已,而出于节省空间等的目的,有了UTF-8等实现方式。而具体的实现方式,不是本文的主要目的,在这里就不赘述了。
#utf-8unicode