带你读《全景揭秘字符编码》之六:六、字符编码模型(4) https://developer.aliyun.com/article/1240930?groupCode=tech_library
6.5、第三层:字符编码方式 CEF
抽象字符集和编号字符集是站在方便我们理解的角度来看的,所以最后我们需要翻译成计算机能懂的语言,将十进制的编号转换成二进制的形式。
因此:字符编码方式就是将字符集的码点编号,转换成二进制码元序列( Code Unit Sequence )的过程。
码元:字符编码的最小处理单元,比如ASCII一个字符等于一个字节,属于单字节码元;UTF-16一个字符等于两个字节,处理过程是按字“word”来处理,所以是双字节码元;UTF-8是多字节编码,有单字节字符,也有多字节字符,每次处理是按单个单个字节解析处理,所以处理最小单位是字节,也属于单字节码元。
这里大家可能会有疑问:十进制直接转二进制不就好了吗,为什么要单独抽出这么一层?
早期的字符编码确实也是这么处理的,十进制和二进制之间是直接转换过去的,比如ASCII码,字符“A”的十进制是“65”,那对应的二进制就是“1000001”,同时存储到硬盘里的也是这个二进制,所以那时候的编码比较简单。
随着后来多字节字符编码(Muilti-Bytes Character Set,MBCS多字节字符集)的出现,字符编号和二进制之间不是直接转换过去的,比如GB2312编码,“万”字的区位编号是“45,82”,对应的二进制机内码却是“1100 1101 1111 0010”(其十进制是“205,242”)。
如果这里不转换直接映射成二进制码会出什么问题呢?“万”字的字符编号“45,82”,45在ASCII里是“-”,82是“U”,那到底是显示两个字符“-U”还是显示一个字符“万”字,为了避免这种冲突 所以增加了前缀处理,详细的过程会在下文具体来讲解。
带你读《全景揭秘字符编码》之六:六、字符编码模型(6) https://developer.aliyun.com/article/1240928?groupCode=tech_library