什么是ANSI编码格式?它是系统默认格式吗?它与ASCII有什么不同?
ANSI编码是一个稍微通用的术语,用于指代系统上的标准代码页,通常是Windows.在西方/美国系统上,它更适合称为Windows-1252.(它可以代表其他系统上的某些其他Windows代码页.)这实际上是ASCII字符集的扩展,因为它包含所有带有128个字符代码的ASCII字符.这种差异是由于"ANSI"编码是8位而不是7位,因为ASCII是(ASCII现在几乎总是编码为8位字节,MSB设置为0).请参阅文章,了解为何此编码通常称为ANSI.
名称"ANSI"用词不当,因为它不符合任何实际的ANSI标准,但名称已卡住.ANSI与UTF-8不同.
从技术上讲,ANSI应该与US-ASCII相同.它指的是ANSI X3.4标准,它只是ANSI组织批准的ASCII版本.使用顶部位设置字符未在ASCII/ANSI中定义,因为它是7位字符集.
然而,DOS和随后的Windows社区多年来滥用该术语已经将其实际意义留作"正在使用的任何机器的系统代码页".系统代码页有时也称为"mbcs",因为在东亚系统上可以是每字符多字节编码.有些代码页甚至可以在多字节序列中使用最高位清除字节作为尾随字节,因此它甚至不能与纯ASCII严格兼容......但即便如此,它仍称为"ANSI".
在美国和西欧的默认设置中,"ANSI"映射到Windows代码页1252.这与ISO-8859-1不同(尽管它非常相似).在其他机器上它可能是任何其他东西.这使得"ANSI"完全无用作外部编码标识符.
严格来说,没有ANSI编码这样的东西.通俗地说,术语ANSI用于几种不同的编码:
ISO 8859-1
Windows CP1252
Windows机器上的当前系统编码(在Win32 API术语中).
曾几何时,微软和其他所有人一样,使用7位字符集,并且在适合它们的时候发明了自己的,尽管它们将ASCII作为核心子集.然后他们意识到世界已经转向8位编码,并且有国际标准,例如ISO-8859系列.在那些日子里,如果你想获得一个国际标准并且你住在美国,你是从美国国家标准协会ANSI购买的,他们用他们自己的品牌和数字重新发布国际标准(这是因为美国政府想要符合美国标准,而非国际标准).所以微软的ISO-8859副本在封面上说"ANSI".而且由于微软当时并不习惯标准,他们也没有意识到ANSI也发布了很多其他标准.因此,他们通过封面上的名称"ANSI"引用了ISO-8859系列中的标准(以及他们发明的变体,因为他们当时并不真正理解标准),并且它进入了微软用户文档,因此进入用户社区.这是大约30年前,但你有时仍然听到这个名字.
ASCII只定义了一个带有128个符号的7位代码页.ANSI将此扩展为8位,并且符号128到255有几个不同的代码页.
命名ANSI不正确,因为它实际上是定义此代码页的ISO/IEC 8859规范.参见ISO/IEC 8859以供参考.有16个代码页ISO/IEC 8859-1到ISO/IEC 8859-16.
Windows-1252再次基于ISO/IEC 8859-1,主要在范围为128到159 的C1控制范围内进行了一些修改.Wikipedia声称Windows-1252也被称为ISO-8859-1 ISO和8859之间的连字符.(难以置信!谁做的那样?!?)