我的老师告诉我ASCII是8位字符编码方案。但它只为0-127码定义,这意味着它可以适合7位。所以不能说ASCII位实际上是7位代码吗?
当我们说ASCII是8位代码时,我们到底是什么意思呢?
发布于 2013-02-05 00:07:21
ASCII最初确实被设想为7位代码。这在8位字节变得无处不在之前就已经完成了,甚至到了20世纪90年代,你还可以找到软件,这些软件假设它可以将每个文本字节的第8位用于自己的目的(“不是8位干净的”)。现在人们认为它是一种8位编码,其中字节0x80到0xFF没有定义的含义,但这是一个retcon。
有许多使用第8位的文本编码;它们可以分为ASCII兼容或不兼容,以及固定宽度或可变宽度。ASCII兼容意味着无论上下文如何,值从0x00到0x7F的单个字节编码的字符与它们在ASCII中编码的字符相同。如果可以避免使用非ASCII兼容的文本编码,那么您不希望与它有任何关系;期待ASCII的天真的程序往往会以灾难性的、通常是破坏安全的方式曲解它们。如今它们已经不再受欢迎,以至于(例如)除了UTF-16之外,HTML5禁止在公共网络上使用它们。我不会再谈论它们了。
固定宽度编码意味着它听起来像这样:所有字符都使用相同的字节数进行编码。要与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”(在http://falsedoor.com/doc/ascii_evolution-of-character-codes.pdf上下载)开始,然后追寻它的参考文献(其中许多参考文献在网上是找不到的,很遗憾,即使可以访问大学图书馆,也很难找到)。
发布于 2013-02-05 00:06:42
在Linux上,man ascii说:
ASCII是美国信息交换标准代码。这是一个7位的代码。
发布于 2015-09-03 07:50:44
原来的ASCII表是用7位编码的,因此它有128个字符。
现在大多数读者/编辑都使用“扩展的”ASCII表(从ISO8859-1开始),它是用8位编码的,有256个字符(包括字母、字母、Œ、é和其他对欧洲语言有用的字符,以及数学符号和其他符号)。
虽然UTF-8使用与基本ASCII表相同的编码(这意味着0x41在两个代码中都是A),但它不共享“拉丁扩展-A”块的相同编码。这有时会导致奇怪的字符出现在àla carte或piñata之类的单词中。
https://stackoverflow.com/questions/14690159
复制相似问题