字符编码的前世今身,ASCII、GBK、UTF-8的关系解密

引言:开发中经常遇到乱码等问题,这些和字符编码必不可分!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。

完结!你学废了吗?!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值