我的老师告诉我 ASCII 是一种 8 位字符编码方案。但它仅定义为 0-127 代码,这意味着它可以容纳 7 位。那么难道不能说 ASCII 实际上是一个 7 位代码吗?
当说 ASCII 是一个 8 位代码时,我们到底在说什么?
ASCII https://en.wikipedia.org/wiki/ASCII确实最初被设想为 7 位代码。这在 8 位字节变得无处不在之前就已经完成了,甚至到了 20 世纪 90 年代,您也可以找到假设它可以将每个文本字节的第 8 位用于其自身目的的软件(“不是 8 位干净的”)。现在的人们想想看作为 8 位编码,其中字节 0x80 到 0xFF 没有定义的含义,但这是一个retcon https://en.wikipedia.org/wiki/Retcon.
有数十种文本编码使用第 8 位;它们可以分为 ASCII 兼容或不兼容、固定宽度或可变宽度。 ASCII 兼容意味着无论上下文如何,值从 0x00 到 0x7F 的单字节编码的字符与 ASCII 中的字符相同。如果可以避免的话,您不想与非 ASCII 兼容的文本编码有任何关系;期望 ASCII 的幼稚程序往往会以灾难性的、经常破坏安全的方式误解它们。它们如今已被弃用,以至于(例如)HTML5 禁止在公共 Web 上使用它们,但不幸的是,UTF-16 https://en.wikipedia.org/wiki/UTF-16。我不会再谈论他们了。
固定宽度编码顾名思义:所有字符都使用相同数量的字节进行编码。为了与 ASCII 兼容,固定字符编码必须仅使用一个字节对其所有字符进行编码,因此它不能超过 256 个字符。目前最常见的此类编码是Windows-1252 https://en.wikipedia.org/wiki/Windows-1252,延伸ISO 8859-1 https://en.wikipedia.org/wiki/ISO/IEC_8859-1.
现在只有一种可变宽度 ASCII 兼容编码值得了解,但它非常重要:UTF-8 https://en.wikipedia.org/wiki/UTF-8,它将所有 Unicode 打包为 ASCII 兼容的编码。如果你能管理它,你真的很想使用它。
最后一点,现在的“ASCII”实际的Unicode 的定义,而不是其原始标准 (ANSI X3.4-1968),因为历史上 ASCII 127 字符库有几十种变体 - 例如,一些标点符号可能会被替换为重音字母以方便传输法语文本。所有这些变体都已过时,当人们说“ASCII”时,他们的意思是值为 0x00 到 0x7F 的字节编码 Unicode 代码点 U+0000 到 U+007F。如果您发现自己正在编写技术标准,这可能只会对您很重要。
如果您对 ASCII 的历史及其之前的编码感兴趣,请从论文“字符代码的演变,1874-1968”开始(地下出版物副本位于http://falsedoor.com/doc/ascii_evolution-of-character-codes.pdf http://falsedoor.com/doc/ascii_evolution-of-character-codes.pdf),然后查找其参考资料(我很遗憾地说,其中许多资料无法在线获取,即使可以访问大学图书馆也可能很难找到)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)