130

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

当说 ASCII 完全是 8 位代码时,我们到底想说什么?

4

6 回答 6

123

ASCII最初确实被设想为 7 位代码。这在 8 位字节无处不在之前就已经完成了,甚至到 1990 年代,您也可以找到假设它可以将每个文本字节的第 8 位用于其自身目的的软件(“不是 8 位干净”)。现在人们认为它是一个 8 位编码,其中字节 0x80 到 0xFF 没有定义的含义,但这是一个retcon

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

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

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

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

如果您对 ASCII 的历史及其之前的编码感兴趣,请从论文“字符代码的演变,1874-1968”开始(samizdat 副本位于http://falsedoor.com/doc/ascii_evolution-of- character-codes.pdf),然后寻找它的参考资料(我很遗憾地说,其中许多都不能在线获得,即使可以访问大学图书馆也可能很难找到)。

于 2013-02-04T16:07:21.433 回答
21

在 Linux 上man ascii说:

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

于 2013-02-04T16:06:42.083 回答
14

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

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

虽然UTF-8使用与基本 ASCII 表相同的编码(在两种代码中0x41都是A),但它对于“Latin Extended-A”块并不共享相同的编码。这有时会导致奇怪的字符出现在à la cartepiñata等单词中。

于 2015-09-02T23:50:43.940 回答
7

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

您可以通过在文本编辑器中输入 ASCII 字符集中的字符串、将编码设置为 ASCII 并查看二进制/十六进制来验证这一点:
在此处输入图像描述

顺便说一句:现在不常见使用(严格)ASCII 编码,支持 UTF-8(它不会浪费上面提到的 MSB - 事实上,MSB 为 1 表示代码点被编码为超过 1 个字节)。

于 2019-03-04T01:13:13.707 回答
0

原始的 ASCII 码提供了 128 个不同的字符,编号从 0 到 127。ASCII 和 7 位是同义词。由于 8 位字节是通用存储元素,ASCII 为 128 个附加字符留出了空间,这些字符用于外语和其他符号。

但是 7 位代码是在 8 位代码之前制作的。ASCII 代表美国信息交换标准代码。在早期的 Internet 邮件系统中,它只支持 7 位 ASCII 码。

这是因为它可以在这样的系统上执行程序和多媒体文件。这些系统使用 8 位字节,但随后必须使用MIMEuucodingBinHex等编码方法将其转换为 7 位格式。这意味着 8 位字符已转换为 7 位字符,这会增加额外的字节来对它们进行编码。

于 2017-01-19T12:11:03.917 回答
-4

当我们将 ASCII 称为 7 位代码时,最左边的位用作符号位,因此使用 7 位我们最多可以写入 127。

这意味着从-126到127,因为ASCII的最大值是0到255。如果最后一位被认为是符号位,则只有7位的参数才能满足。

于 2018-07-24T16:04:15.950 回答