带你读《全景揭秘字符编码》之六:六、字符编码模型(5)

简介: 带你读《全景揭秘字符编码》之六:六、字符编码模型(5)

带你读《全景揭秘字符编码》之六:六、字符编码模型(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

相关文章
|
存储
带你读《全景揭秘字符编码》之二:二、什么是字符编码?
带你读《全景揭秘字符编码》之二:二、什么是字符编码?
252 1
|
存储
带你读《全景揭秘字符编码》之六:六、字符编码模型(4)
带你读《全景揭秘字符编码》之六:六、字符编码模型(4)
160 0
|
存储 数据库 Swift
带你读《全景揭秘字符编码》之六:六、字符编码模型(6)
带你读《全景揭秘字符编码》之六:六、字符编码模型(6)
172 0
带你读《全景揭秘字符编码》之六:六、字符编码模型(1)
带你读《全景揭秘字符编码》之六:六、字符编码模型(1)
146 0
带你读《全景揭秘字符编码》之六:六、字符编码模型(3)
带你读《全景揭秘字符编码》之六:六、字符编码模型(3)
159 0
带你读《全景揭秘字符编码》之六:六、字符编码模型(2)
带你读《全景揭秘字符编码》之六:六、字符编码模型(2)
160 0
带你读《全景揭秘字符编码》之五:五、字符编码的历史(3)
带你读《全景揭秘字符编码》之五:五、字符编码的历史(3)
163 0
带你读《全景揭秘字符编码》之五:五、字符编码的历史(4)
带你读《全景揭秘字符编码》之五:五、字符编码的历史(4)
153 0
带你读《全景揭秘字符编码》之五:五、字符编码的历史(2)
带你读《全景揭秘字符编码》之五:五、字符编码的历史(2)
136 0
带你读《全景揭秘字符编码》之五:五、字符编码的历史(1)
带你读《全景揭秘字符编码》之五:五、字符编码的历史(1)
161 0