中文编码、字符集,GBK, UTF-8的概念

字符集指的是什么?

字符集是一个人为的规定,人们用一个小册子规定好“文字字符”与“数字”的对应关系。

其中,每一个字符对应的数组也称其为编码。

例如,ASCII码表就是一个字符集

char 'A'  = 65,A的编码为65

char '0'  = 48,0的编码为48

字符集是由一些组织制定和发布的,如ISO/IEC就负责制定字符集。

每一个字符集都有一个标准编号,如ASCII字符集的编号为ISO/IEC 646。

【拉丁字符集(Latin)】

拉丁字符集:收录了欧洲各个国家的字符。例如,希腊字母, Α α, Β β

拉丁字符集的编号为ISO 8859系列

例如:ISO8859-1字符集,也就是 Latin-1,是西欧常用字符,包括德法两国的字母。

ISO8859-2字符集,也就是 Latin-2,收集了东欧字符。

注意:拉丁字符总数超过了256个,无法用一个char型表示,需要用2个字节。

所以即使不使用中文,外文字母的表示也有问题。

char a='α';//有问题

问题原因:无法用一个字节表示一个字符。

char str[]="α β";//五个字节存储->sizeof(str)

【中文字符集】

GB2312 中文简体国标码(汉字数:6763)

GBK 扩展中文GB编码(兼容GB2312)

GB18030 用1-4个字节编码,容量超大

BIG5 中文繁体编码

CJK 中日韩大字符集编码

Unicode  统一码,用0-0x10FFFF映射全球各国的语言文字。

【GB2312/GBK】

双字节编码,每个字节的高位为1

不包含生僻字

对于人名、古汉语等方面出现的罕见字,GB2312不能处理,这导致了后来GBK以及GB 18030汉字字符集的出现

GBK兼容了GB2312,较为常用。

【Unicode】

国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。

0-0x10FFFF(最多1114112个字符)

【问题】Unicode用几个字节来表示一个字符?

第一种方案:UFT-32编码

  每个字符用一个int来表示

  特点:简单,但太浪费空间

第二种方案:UTF-16编码

  特点:用1-2个short来表示一个字符

第三种方案:UTF-8编码

  用1-4个字节来表示一个字符(比较节省空间)

上一篇:Windows Locale Codes - Sortable list(具体一个语言里还可具体细分,中国是2052,法国是1036)


下一篇:Python中文乱码