对 字符、字节、编码、解码、ASCII、Unicode、UTF-8 的一些理解

通俗的讲,字符是给人类看的,像字母、数字、汉字等。字节是给电脑看的,可以将它理解成字符对应数字编号的二进制表示,因为计算机只认识01信号。计算机中8位1个字节。

将字符转为字节的过程称为编码,将字节转为字符的过程称为解码。计算机在数据传输的时候只能传输01信号,所以需要对传输的内容进行编码,在接收到这种01信号之后为了便于人们阅读又需要解码。编码的过程中先拿到字符所对应的数字编码,进而根据这个数字编码计算出这个数字编码的二进制,再在这个二进制的基础上结合某些规则得到它的字节01序列,解码的过程相反,先根据某些规则拿到字节01序列中的二进制,再根据这个二进制拿到它的数字编码,最后根据这个数字编码得到对应的字符。

在上面这个过程中,ASCII和Unicode就属于这样的一套字符与数字编码之间的映射规则。UTF-8属于数字编码的二进制与实际的字节序列之间的计算规则。

ASCII和Unicode区别在于:ASCII编码的出现最初的目的只是服务于西方,便于西方国家之间的信息交换,这套编码中只为128个字符进行了编码(0~127),表示所有的大小写字母、数字0~9、标点符号,以及在美式英语中使用的特殊控制字符,所以使用ASCII编解码适合只含有这些字符的文件。而后来随着计算机的世界互联,不同国家之间需要实现信息交换,这套只基于英语的编解码规则已经行不通了,因此出现了Unicode。Unicode将所有人类已知字符都进行了数字编码,所以基于这套字符集可以实现不同国家不同语言之间的信息传输,因此Unicode也被称为万国码。需要知道的是Unicode字符集编码中前0~127所对应的字符与ASCII完全保持了一致。

而UTF-8与Unicode的关系是:UTF-8是一种变长编码,解决了Unicode编码的冗余问题,比如通过这个网站https://www.52unicode.com可以查询到 a 的unicode码位为U+0061,注意这是16进制,再通过这个网站https://tool.oschina.net/hexconvert将上面的码位转为对应的二进制是1100001,而汉字 王 的unicode码位对应的二进制是111001110001011,如果以 王 的二进制长度为标准存储 a,显然是一种浪费,以 a 的二进制长度为标准存储 王,又会存储不下。至于UTF-8是怎么实现变长编码的,可以参考https://wenku.baidu.com/view/8bda41a7e63a580216fc700abb68a98271feacbf.html

总结一下,从这篇博客中我们只需要知道:

  • ASCII既可以指字符集又可以指编码格式,因为ASCII编码就是对应数字编码的二进制高位补0,Unicode是对ASCII字符集的拓展。
  • Unicode是字符集,只定义了字符与数字编码之间的对应关系,UTF-8是Unicode字符集下的一中具体编码实现,负责以某种规则将这个数字编码变成符合字节形式的01序列。
  • UTF-8兼容ASCII,上面说了Unicode字符集编码中前0~127所对应的字符与ASCII完全保持了一致,而UTF-8的编码规则决定了它的编码结果和原ASCII编码结果相同,也就是用ASCII编码的文件用UTF-8也可以正常解码
  • UTF-8对数字、字母等ASCII码表中的128个字符采用了一个字节长度表示,对汉字采用了3个字节长度表示
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值