ASCII码是7位还是8位?

我的老师告诉我,ASCII是8位字符编码scheme。 但是它只被定义为0-127码,这意味着它可以适合7位。 那么难道说ASCII位实际上是7位代码吗?

当说ASCII是8位代码的时候,我们说什么意思呢?

ASCII确实最初构思为7位代码。 这在8位字节变得无处不在的情况下完成了,甚至到了20世纪90年代,你可以find软件假设它可以使用每个字节的第8位作为自己的目的(“不是8位清理”)。 现在人们认为它是一个8位编码,字节0x80到0xFF没有定义的意思,但这是一个retcon 。

有几十个使用第8位的文本编码; 它们可以分类为ASCII兼容或不固定宽度或可变宽度。 与ASCII兼容意味着无论上下文如何,具有从0x00到0x7F的值的单个字节对与在ASCII中相同的字符进行编码。 如果可以避免的话,您不希望与非ASCII兼容的文本编码有任何关系; 期待ASCII的幼稚程序往往会把它们误解为灾难性的,往往是破坏性的时尚。 如今它们已经被弃用了,例如,HTML5禁止在公共Web上使用它,而UTF-16是个不幸的例外。 我不会再谈论他们了。

固定宽度的编码意味着它听起来像:所有字符都使用相同数量的字节进行编码。 为了与ASCII兼容,固定编码的编码器只能使用一个字节对其所有字符进行编码,因此不能超过256个字符。 目前最常见的编码是Windows-1252 , ISO 8859-1的扩展。

目前只有一种值得了解的可变宽度的ASCII兼容编码,但它是非常重要的: UTF-8将所有的Unicode编码为ASCII兼容的编码。 如果你可以pipe理它,你真的想要使用它。

作为最后一点,现在“ASCII”采用Unicode的实际定义,而不是其原始标准(ANSI X3.4-1968),因为历史上在ASCII 127字符的曲目中有几十个变体 – 例如,一些标点符号可以用重音字母代替,以方便传送法文文本。 现在,所有这些变体都已经过时了,当人们说“ASCII”时,它们表示0x00到0x7F的字节对Unicode码点U + 0000到U + 007F进行编码。 如果你发现自己写技术标准,这可能只对你很重要。

如果您对ASCII历史和其之前的编码感兴趣,可以从文章“字符代码的演变,1874-1968”(samizdat copy at http://falsedoor.com/doc/ascii_evolution-of- character-codes.pdf ),然后追查其参考资料(其中许多资料在网上无法find,即使访问大学图书馆也很难find,我很遗憾地说)。

在Linux上, man ascii说:

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

原始的ASCII表格被编码为7位,因此它有128个字符。

现在大多数阅读器/编辑器都使用一个“扩展的”ASCII表(来自ISO 8859-1 ),它被编码在8位上,并且享有256个字符(包括字母,数字, é和其他欧洲语言字符)作为math符号和其他符号)。

虽然UTF-8使用与基本ASCII表相同的编码(意思是两个代码中的0x41A ),但它不共享“Latin Extended-A”块的相同编码。 这有时会导致奇怪的人物出现在单词或piñata的单词中。

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