文章目录
之前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-8和UTF-16编码:Unicode编码的转换格式,可变长编码,相对于Unicode更节省空间。UTF-16的字节序有大尾序(big-endian)和小尾序(little-endian)之别。
我们的国标编码(字符集)是这样发展的: