字符编码

编码就是将一个字节和要编码的字符连接起来。最开始美国人发明的是ASCII编码,ASCII码一个字节对应一个字符,即只能编码0-255,一共255个字符(0不占),所以只能编写英文字母和一些字符,这些字符对美国人来说是够用的,但是对亚洲这些象形文字国家来说就不够了,所以就衍生出了GB2312、GB2312-80编码专门用来表示中文。

GB2312中的汉字是由两个字节组成,例如:中为 D6 D0, 国为 B9 FA。但GB2312还是存在不足,即中文的编码拿给其它国家的人,让他们解码时,有可能就成了乱码,不能翻译成他们的语言。所以由此就衍生了Unicode编码。

Unicode编码的原理时,全世界所有字符都有一个唯一的对应的编码。Unicode编码的编码范围为:0-0x10FFFF,可以容纳100多万个符号。

Unicode是字符集,它是字符于字节的转换表,但是在计算机中是如何存储的呢?

着就引出了三种存储方案:UTF-8、UTF-16、UTG-32

UTF-16:所有字符以两个字节为单位,例如:“中”为:0x12345,对应到utf-16中去就是0x00 01 23 45,也就是说用了两个单位来存储中这个字符,这样的好处是解码时很好切,每隔16位切一刀,然后对应Unicode字符集翻译出来就可以了,但缺点也很明显,即会浪费空间,因为就像刚才举的例子开始就浪费了(00 0)三个字节,那里存储了无意义的内容,在网络传输中,自然是传输的内容越少越好,所以可以用UTF-8来存储。

UTF-8:变长的存储方案。(一个字节能存下的用一个字节,两个字节能存下就用两个,三个字节能存下就用三个),缺点是解析困难。

①000000 - 00007F      0XXXXXXX(一个字节)

②000080 - 0007FF      110XXXXX 10XXXXXX(两个字节)

③000800 - 00FFFF      1110XXXX 10XXXXXX 10XXXXXX

④010000 - 10FFFF       11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

左边对应的是unicode字符集的内容,右边对应的是utf-8字符编码,所以当字符在unicode字符集在①时,只需要一个字节,如果字符在②字符集就用两个字节。

 

例如:“A中”-》(utf-8)00000000h:EF EB BF 41 E4 B8 AD

其中前三个字节先不管,41对应着A,因为A的编码在①中;“中”在Unicode字符集中对应的是(4E 2D)->(二进制) 01001110 00101101 ,E4 B8 AD-》(二进制)11100100 10111000 10101101,将二进制带入③中去掉首部二进制变为0100 111000 101101,就和前面的Unicode字符集中对应起来了。

 

解析utf-8:根据前缀(例如:1110, 11110)

解析时如何判断utf-8、utf-16、utf-32:根据解析时的前缀

LE表示小端存储、BE表示大端存储。

例如:件中的UTF-8

 

utf-32:每四个字节为一个单位。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值