想必很多人对于字符编码ASCII, GB2312, Unicode和UTF-8之间的区别搞不清楚, 那么我们今天就来弄清楚.
核心规则
计算机的所有数据全是由0和1构成, 这是基础的基础, 那么ASCII, GB2312, Unicode等所有编码方式都只是为了方便表示0和1的组成方式, 方便人们记忆, 仅此而已, 大家要牢牢记住这一条.
一个0或1表示一个bit, 也可以叫位, 也可以叫比特, 它们是一个意思.
8bit可以构成一个byte, 也可以叫字节, 这个非常重要, 所有编码就是以字节为基础进行构建, 也要牢牢记住.
ASCII编码
有了上面基础我们就可以讨论ASCII编码规则了.
计算机最早是由美国人发明的, 美国人的母语是英语, 英语的基础字符只有几十个, 于是美国人发明了ASCII编码规则, 用一个字节在计算机中表示他们的语言. 这是最早的编码规则.
GB2312编码
接着计算机流传到了中国, 中国也想在计算机中表示自己的语言, 由于汉语是象形字, 有10W+个字符, 那么就不可能用一个字节来表示汉字, 于是发明了GB2312编码规则, 用两个字节来表示汉字, 两个字节有16位, 有256*256种表示方式, 于是可以表示6W+的字符, 常用的汉字都能表示, 也够用了.
这里要记住ASCII编码和GB2312编码完全是不同的两套编码.
其他国家的编码
同理, 计算机也流传到了其他国家, 这些国家也创建了自己的编码, 于是混乱就开始, 各国之间文本完全不能流通, 因为所用的编码不同.
Unicode编码
有一批大能之士看到这种情况就想要解决编码的混乱, 于是他们发明了一套全球唯一的一套编码, 叫做Unicode, 该编码可以表示的字符非常多, 可以容纳全球的所有字符, 于是终于可以解决全球编码混乱的问题了.
一个巨大的坑
想必到了这里很多人都明白了ASCII, GB2312, Unicode之间的关系吧, 他们是三套不同的字符编码规则, 定义了字符在计算机中如何用0和1来表示.
但是这里有一个很大的坑, 那就是混淆了编码规则和编码实现.
我们拿GB2312举例, 它的编码规则叫做GB2312, 同时它还有一个让计算机解析它规则的编译器, 也叫做GB2312. 它们完全是两种东西, 一个是定义, 另一个是让计算机明白这种定义的程序.
但是对于Unicode来说, 它很特殊, 它只是编码规则的定义, 并没有实现这套编码规则.
UTF-8
到了这里可以说下UTF-8了, 它只是Unicode的一种实现而已.
除了UTF-8, 还有UTF-16, UTF-32, 它们都是以Unicode这套编码规则为基础, 在计算机中进行实现.
为什么互联网广泛使用Unicode的UTF-8的实现?
这里不得不说下Unicode编码的巨大缺点: 每个字符使用的字节数一样多, 也就是不管任何字符都需要用4个字节(UCS-4标准)来表示, 假如你存储的是英文, 本来一个字节就能存储, 但用Unicode就需要用4个字节, 这是不能接受的.
但是UTF-8使用了变体方式来实现, 解决了这个容量高的问题, 于是互联网上广泛使用UTF-8.
文章首发于: https://w2fenx.com/304.html