我发现一篇有趣的文章“字符代码问题教程”(http://jkorpela.fi/chars.html#code http://jkorpela.fi/chars.html#code)解释了术语“字符代码”/“代码点”和“字符编码”。
前者只是分配给一个字符的整数。例如 65 到字符 A。字符编码定义了如何通过一个或多个字节表示这样的代码点。
对于古老的 ASCII,作者说道:“ASCII 标准指定的字符编码非常简单,对于代码编号不超过 255 的任何字符代码来说,最明显的一个是:每个代码编号都表示为一个八位位组,其中相同的值。”
因此,A 的代码点 65 将被编码为 0100 0001。
因为我有 127 个 ASCII 字符,所以有 127 个代码点,其中每个代码点始终由一个字节编码。
如果我总结一下,我有以下步骤来对 ASCII 字符进行编码:
- 为每个字符分配一个数字(代码点)(例如 A->65)
- 使用具有相同值的字节对字符进行编码(例如 0100 0001)
所以对于字母 A 和 B 来说是
A -> 65 -> 0100 0001
乙 -> 66 -> 0100 0010
我的问题是:
为什么代码点和 ASCII 编码要分离? ASCII 只有一种编码。因此,至少对于 ASCII,我不清楚为什么要完成中间步骤(映射到整数)。直接编码如
一个-> 0100 0001
乙 -> 0100 0010
也可能吗?如果我对一个 ASCII 字符有多种编码,那么分离是合理的,但只有一种编码形式对我来说没有意义。
你说得对。每个概念不一定需要特定编码的可辨别的实现。但是,在一般讨论字符集和编码时,最好区分所有概念。
实际上,您可以认为 ASCII 有两种编码,一种是 7 位,一种是 8 位。 7 位与在字节的第 8 位具有奇偶校验位的方案一起使用。 Unicode 以其多种编码而闻名,包括 UTF-8、UTF-16 和 UTF-32。
缺少术语:代码单元。编码将代码点映射到代码单元序列。代码单元是固定大小的整数。您可能知道,大于 8 位的整数具有字节顺序(也称为字节序)。这导致 UTF-16 和 UTF-32 具有大端和小端变体。
计算机化文本的基本规则:使用写入文件或流的编码进行读取。表示文本的字节必须伴有编码知识,编码知识来自声明、标准、约定、规范……。
ASCII 中有 128 个代码点。大多数时候提到 ASCII 是不正确的。请求说明 ASCII 的规范或进行更正。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)