Character encoding ASCII码是7位还是8位?

Character encoding ASCII码是7位还是8位?,character-encoding,ascii,Character Encoding,Ascii,我的老师告诉我ASCII是8位字符编码方案。但它只为0-127码定义,这意味着它可以适合7位。所以难道不能说ASCII位实际上是7位代码吗 当说ASCII是8位代码时,我们到底想说什么呢?在Linuxman ASCII上说: ASCII是信息交换的美国标准代码。这是一个7位代码 实际上,它最初被认为是一个7位代码。这在8位字节普及之前就已经做得很好了,甚至到了20世纪90年代,你也可以找到一种软件,认为它可以将每个文本字节的第8位用于自己的目的(“不是8位干净”)。现在人们认为它是一种8位编码,

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


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

在Linux
man ASCII
上说:

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

实际上,它最初被认为是一个7位代码。这在8位字节普及之前就已经做得很好了,甚至到了20世纪90年代,你也可以找到一种软件,认为它可以将每个文本字节的第8位用于自己的目的(“不是8位干净”)。现在人们认为它是一种8位编码,其中字节0x80到0xFF没有定义的含义,但这是一种错误

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

固定宽度编码的意思是:所有字符都使用相同的字节数进行编码。要与ASCII兼容,fixed with encoding必须仅使用一个字节对其所有字符进行编码,因此不能超过256个字符。如今,最常见的这种编码是对的扩展

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

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


如果你对ASCII的历史和之前的编码感兴趣,可以从“字符代码的演变,1874-1968”(samizdat copy at)这篇论文开始,然后追踪它的参考文献(我很遗憾地说,很多文献在网上都找不到,甚至连大学图书馆都找不到).

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

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


虽然UTF-8使用与基本ASCII表相同的编码(意味着
0x41
在两种代码中都是A),但它对“拉丁扩展-A”块不共享相同的编码。这有时会导致奇怪的字符出现在“点菜”或“皮涅塔”之类的单词中。

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

当我们将ASCII称为7位代码时,最左边的位用作符号位,因此7位最多可写入127位。这意味着从-126到127,因为ASCII的最大imam值是0到255。仅当最后一位被视为符号位时,7位的参数才能满足这一要求。ASCII编码为7位,但实际上,ASCII编码的字符不是以7位为一组存储的。相反,一个ASCII存储在一个字节中,MSB通常设置为0(是的,它在ASCII中被浪费)

您可以通过在文本编辑器的ASCII字符集中输入字符串,将编码设置为ASCII,并查看二进制/十六进制:


旁白:使用(严格的)ASCII编码现在已经不常见了,有利于UTF-8(它不会浪费上面提到的MSB-事实上,MSB为1表示代码点的编码超过1字节)。

那么ASCII NOAWADAY是7位还是8位?显然,你说它现在使用0x00-0x7F。但是,我们是否计算领先的0?这取决于你是哪种学究。仍然正式定义ASCII的规范(ANSI X3.4-1968)将其描述为7位编码,但再也没有人传输7位字节了,如今的互操作性规定第八位必须为零——您不能将其用于奇偶校验位或类似位。因此,IMNSHO将ASCII描述为一种8位编码,恰好将其数字空间的上半部分保留为“保留,请勿使用”,这同样有效。不管怎样,如果你