引言:开发中经常遇到乱码等问题,这些和字符编码必不可分!ASCII码、GBK、UTF-8到底有有何过关系呢?
1.字符编码前世-ASCII码
在USA,字符有哪几种?英文 + 数字 + 标点符号 + 换行等控制字符,经统计共128个。
那么定义0-127共128个码位,分别对应128个字符,这就是ASCII字符集。
128个字符集,用二进制0、1表示,0000 0000 - 0111 1111这种八位的二进制表示,这就是ASCII码。
2.扩展ASCII码
计算机传入欧洲,出现额外的字符,作为扩充,从1000 0000扩充到1111 11111代表255中字符,
这就是扩展ASCII码。
3.GB2312
计算机来到中国,显然255个字符不够。同时,八位二进制已然不够,引入十六位(两个字节)的二进制。
对汉字进行分区管理:
其中一级汉字为常用汉字,二级汉字为偏僻汉字。
每个区,带上区号 + 坐标位置为该字符的码位。如,y的码位为0389:
ASCII码是直接将字符对应的ASCII字符集转二级制,那么GB2312码位和GB2312是如何转化?
将区号与坐标位置分别用十六进制0X标识,然后分别加上0XA0,再组合得到该字符的GB2312码。(高把位和低八位都+0XA0,高八位和低八位都大于127,和ASCII码直接区分开了)
4.GB2312、GBK、GB18030有何关系?
GB2312 : 6763个汉字,高位和低位都大于127;
GBK : 不再规定低位大于127,新增近20000个汉字和符号;
GB18030: 新增几千少数名族字符。
5. Unicode编码
我国(中国)引入了GBK编码,广而泛之,其他国家也有自己的编码字符,编码和解码方式不统一,各国交往就乱码~。ISO组织看不下去:把世界所有字符整合成一套,分配码位,出现Unicode标准。
unicode最开始使用ucs-2字符集:码位转16进制,2的16次方最多表示65536个字符,不够用。进而引入ucs-4字符集,采用32位,但是占用空间大。从而出现了utf-8编码,可变长编码,utf-8通用,但是在我国使用,可根据实际确定是否使用utf-8还是GBK,毕竟utf-8中中文需要占用三个字节,比GBK更占空间。
6.UTF8、UTF8-BOM、UTF8-SIG
utf8-bom是windows的一套做法,BOM即Byte Order Mark字节序标记。BOM是为UTF-16和UTF-32准备的,用户标记字节序(byte order)
Windows就是使用BOM来标记文本文件的编码方式的。慎用,linux上会出问题。带bom用utf8解析前面的bom会被解析成文本。
utf8-sig,sig全称signature,带签名的utf8,即utf8-bom。
完结!你学废了吗?!