【锟斤拷】的故事:谈谈汉字编码和常用字符集

文章目录


之前N篇都提到了汉字乱码,真是个长久困扰我们的问题。
无论开发语言,磁盘文件,数据库,网络传输都可能出现编码问题。

(一)编码

计算机本无码,它们只认0101的二进制(我们为了方便经常写作格式0xFF的16进制)。
所以要显示任何文字都需要进行编码,即使是英文字母。所以是人类创造了码。
废话尽量简短吧:
PS:内容和图来自百度和其它网站(找到链接的都给了)。

1.1 ASCII码

ASCII= American Standard Code for Information Interchange=美国信息交换标准码

单个字节表示一个字符,最高位为0,其它位的组合表示了各种英文字母与符号,比如:

最多: 0111 1111,7F
HEX:41 42 43 44 2C 31 32 33 34 —— ABCD,1234

在英语中,用128个符号编码便可以表示所有字母和符号,但是用来表示其他语言是不够的。

1.2 ASCII码的扩展

将最高位也使用起来,比如法语中的é的编码为130(二进制10000010)。
这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。

最多: 1111 1111,FF

但是不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如:

字节(130)在法语编码中代表了é,
在希伯来语编码中却代表了字母Gimel (ג),
在俄语编码中又会代表另一个符号。

但是不管怎样,所有这些编码方式中,0–127表示的符号是一样的,不一样的只是128–255的这一段。
PS:为了知道同样的编码到底表示的具体字符,我们必须知道这段文字的字符集

1.3 汉字(包括其它文字)的多字节的编码

由于我们有国家标准的编码(GB)又有国际标准的编码(Unicode),所以中文相对复杂一些。

  • GB2312编码:1981年5月1日发布的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。

  • BIG5编码:*地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。

  • GBK编码:1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。

  • GB18030编码:2000年3月17日发布的汉字编码国家标准,是对GBK编码的扩充,覆盖中文、日文、朝鲜语和中国少数民族文字,其中收录27484个汉字。GB18030字符集采用单字节双字节四字节三种方式对字符编码。兼容GBK和GB2312字符集。

  • Unicode编码:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。Unicode采用四字节为每个字符编码。

  • UTF-8UTF-16编码:Unicode编码的转换格式,可变长编码,相对于Unicode更节省空间。UTF-16的字节序有大尾序(big-endian)和小尾序(little-endian)之别。

我们的国标编码(字符集)是这样发展的:
【锟斤拷】的故事:谈谈汉字编码和常用字符集

1.4 编码实例和测试

举个例子,四个汉字(参考

上一篇:kerberos认证协议爱情故事


下一篇:Windows内网协议学习Kerberos篇