计算机字符编码发展史及其应用范围
原文链接:http://doc.xuehai.net/39309/
2013/05/07 | 分类: 程序员 | 6 条评论 | 标签: ASCII, UNICODE, 编码
分享到:41
伯乐在线注:本文来自文章作者@acmerfight 的投稿(原文链接)。如果其他朋友也想投稿,请发邮件至 webmaster@http://doc.xuehai.net,或直接给@伯乐在线官方微博 私信投递。
———————————————————-
你是否认为“ASCII码 = 一个字符就是8比特”?你是否认为一个字节就是一个字符,一个字符就是8比特?你是否还认为你是否还认为UTF-8就是用8比特表示一个字符?如果真的是这样认为认真读完这篇文章吧!
为什么要有编码?
首先大家需要明确的是在计算机里所有的数据都是字节的形式存储,处理的。我们需要这些字节来表示计算机里的信息。但是这些字节本身又是没有任何意义的,所以我们需要对这些字节赋予实际的意义。所以才会制定各种编码标准。
编码模型
首先需要明确的是存在两种编码模型
简单字符集
在这种编码模型里,一个字符集定义了这个字符集里包含什么字符,同时把每个字符如何对应成计算机里的比特也进行了定义。例如ASCII,在ASCII里直接定义了A -> 0100 0001。 现代编码模型
在现代编码模型里要知道一个字符如何映射成计算机里比特,需要经过如下几个步骤。 1.
2. 知道一个系统需要支持哪些字符,这些字符的集合被称为字符表(Character repertoire) 给字符表里的抽象字符编上一个数字,也就是字符集合到一个整数集合的映射。这种映
射称为编码字符集(CCS:Coded Character Set),unicode是属于这一层的概念,跟计算机里的什么进制啊没有任何关系,它是完全数学的抽象的。
3. 将CCS里字符对应的整数转换成有限长度的比特值,便于以后计算机使用一定长度的
二进制形式表示该整数。这个对应关系被称为字符编码表(CEF:Character Encoding Form)UTF-8, UTF-16都属于这层。
4. 对于CEF得到的比特值具体如何在计算机中进行存储,传输。因为存在大端小端的问
题,这就会跟具体的操作系统相关了。这种解决方案称为字符编码方案(CES:Character Encoding Scheme)。
平常我们所说的编码都在第三步的时候完成了,都没有涉及到CES。所以CES并不在本文的讨论范围之内。
现在也许有人会想为什么要有现代的编码模型?为什么在现在的编码模型要拆分出这么多概