ASCII码是7位还是8位?

时间:2013-02-04 15:42:56

标签: character-encoding ascii

我的老师告诉我ASCII是8位字符编码方案。但它仅定义为0-127个代码,这意味着它可以适合7位。那么不能说ASCII位实际上是7位代码吗?

当说ASCII完全是8位代码时,我们要说什么呢?

6 个答案:

答案 0 :(得分:74)

ASCII确实最初被认为是一个7位代码。这在8位字节无处不在之前就已经完成了,甚至到了20世纪90年代,你也可以找到软件,假设它可以使用每个文本字节的第8位用于它自己的目的(“不是8位清理”)。现在人们把它想象成是一个8位编码,其中字节0x80到0xFF没有明确的含义,但那是retcon

有许多文本编码使用第8位;它们可以被分类为ASCII兼容与否,以及固定宽度或可变宽度。 ASCII兼容意味着无论上下文,具有0x00到0x7F值的单个字节编码与ASCII中相同的字符。如果你可以避免它,你不希望与非ASCII兼容的文本编码有任何关系;期待ASCII的天真程序倾向于以灾难性的,通常是破坏性的方式误解它们。现在它们已被弃用(例如)HTML5禁止在公共网站上使用它们,但UTF-16的例外情况令人遗憾。我不会再谈论它们了。

固定宽度编码意味着它的含义:所有字符都使用相同的字节数进行编码。要与ASCII兼容,fixed-with编码必须仅使用一个字节对其所有字符进行编码,因此它不能超过256个字符。目前最常见的此类编码是Windows-1252ISO 8859-1的扩展名。

现在只有一种可变宽度的ASCII兼容编码值得了解,但它非常重要:UTF-8,它将所有Unicode打包成与ASCII兼容的编码。如果你能管理它,你真的想要使用它。

作为最后一点,“ASCII”现在从Unicode中获取实用定义,而不是原始标准(ANSI X3.4-1968),因为历史上在ASCII上有几十种变体127 - 字符集 - 例如,一些标点符号可能会被重音字母替换,以方便法语文本的传输。现在所有这些变化都是过时的,当人们说“ASCII”时,它们意味着值为0x00到0x7F的字节编码Unicode代码点U + 0000到U + 007F。如果您发现自己编写技术标准,这可能只对您有用。

如果您对ASCII的历史及其之前的编码感兴趣,请从文章“The Character of Character Codes,1874-1968”(samizdat copy at http://falsedoor.com/doc/ascii_evolution-of-character-codes.pdf)开始,然后查阅其参考文献(我很遗憾地说,其中很多都不能在网上找到,即使可以访问大学图书馆也很难找到。)

答案 1 :(得分:13)

在Linux man ascii上说:

  

ASCII是美国信息交换标准码。它是一个7位代码。

答案 2 :(得分:8)

原始ASCII表在 7位上编码,因此它有128个字符。

如今大多数读者/编辑使用“扩展”ASCII表(来自 ISO 8859-1 ),该表在 8位上编码,享有256个字符(包括< em>Á,ÄŒéè以及其他对欧洲语言有用的字符以及数学字形和其他符号)。

虽然UTF-8使用与基本ASCII表相同的编码(在两个代码中都表示0x41 A ),但它不会为“Latin Extended-”共享相同的编码一个“块。这有时会导致奇怪的字符出现在àlacarte piñata等字样中。

答案 3 :(得分:1)

ASCII编码为7位,但是实际上,以ASCII编码的字符不会以7位为一组存储。取而代之的是,一个ASCII存储在一个字节中,而MSB通常设置为0(是的,它浪费了ASCII)。

您可以通过在文本编辑器中的ASCII字符集中输入一个字符串,将编码设置为ASCII并查看二进制/十六进制来验证这一点:
enter image description here

此外:现在,(严格)ASCII编码的使用已不常见,而支持UTF-8(不会浪费上述MSB-实际上,MSB为1表示代码点编码超过1个字节。

答案 4 :(得分:0)

原始ASCII码提供了128个不同的字符,编号为0到127. ASCII 7位是同义词,因为8位字节是公共存储元素,ASCII为128个附加字符留出空间,用于外语和其他符号。但是7位代码是在8位代码之前创建的。 ASCII代表美国信息交换标准码 在早期的互联网邮件系统中,它只支持7位ASCII码,这是因为它可以通过suck系统执行程序和多媒体文件。这些系统使用8位字节,然后必须使用MIME,UUcoding和BinHex等编码方法将其转换为7位格式。这意味着8位已转换为7位字符,这会增加额外的字节来编码它们。

答案 5 :(得分:-1)

当我们将ASCII称为7位代码时,最左边的位用作符号位,因此使用7位,我们最多可以写127。这意味着-126至127,因为ASCII的最大阿am值为0至255。如果将最后一位视为符号位

,则只能使用7位的参数来满足