Answers:
ANSI编码是一个稍微通用的术语,用于指代系统(通常是Windows)上的标准代码页。在Western / US系统上,它更恰当地称为Windows-1252。(它可以表示其他系统上的某些其他Windows代码页。)这实质上是ASCII字符集的扩展,因为它包括所有ASCII字符以及附加的128个字符代码。这种差异是由于以下事实造成的:“ ANSI”编码是8位而不是ASCII的7位(如今,几乎将ASCII编码为8位字节,而MSB设置为0)。有关为什么通常将这种编码称为ANSI的解释,请参见该文章。
名称“ ANSI”是一个误称,因为它与任何实际的ANSI标准都不对应,但是名称已被保留。ANSI与UTF-8不同。
windows-1254
。
从技术上讲,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用于几种不同的编码:
曾几何时,Microsoft和其他所有人一样,都使用7位字符集,尽管他们将ASCII作为核心子集,但他们还是在7位字符集发明了自己的字符集。然后他们意识到世界已经转向8位编码,并且周围有了国际标准,例如ISO-8859系列。在那些日子里,如果您想掌握国际标准并住在美国,可以从美国国家标准学会ANSI购买,后者会用自己的品牌和编号重新发布国际标准(这是因为美国政府希望符合美国标准,而不是国际标准)。因此,Microsoft的ISO-8859副本的封面上标有“ ANSI”。而且由于当时微软还不太习惯标准,所以他们没有 意识到ANSI还发布了许多其他标准。因此,他们用封面上的名称“ ANSI”引用了ISO-8859家族中的标准(以及他们发明的变体,因为当时他们对标准不甚了解),并最终被微软使用。用户文档,从而进入用户社区。那是大约30年前的事,但是今天您仍然有时听到这个名字。
ASCII只是定义了一个具有128个符号的7位代码页。ANSI将其扩展到8位,并且符号128到255有几个不同的代码页。
ANSI的命名不正确,因为实际上是定义此代码页的ISO / IEC 8859规范。请参阅ISO / IEC 8859以获取参考。ISO / IEC 8859-1至ISO / IEC 8859-16有16个代码页。
Windows-1252再次基于ISO / IEC 8859-1,并进行了一些修改,主要是在C1控件的范围内设置为128到159。Wikipedia指出Windows-1252也被称为ISO-8859-1,第二和8859之间的连字符。(令人难以置信!谁在做类似的事情?!?)
基本上,“ ANSI”是指Windows上的旧版代码页。另请参阅Raymond Chen的有关该主题的文章:
造成这种情况的原因是Windows代码页1252最初基于ANSI草案,该草案成为ISO标准8859-1。
在大多数代码页中,前127个字符与ASCII相同,但是较高的字符有所不同。
然而,ANSI并不会自动意味着CP1252或拉丁1。
尽管您感到困惑,但您现在应该只避免使用Unicode即可。
万一您的PC不是“西方” PC,并且您不知道使用哪个代码页,则可以查看此页:国家语言支持(NLS)API参考
[Microsoft删除了此参考,将其形成为Web存档国家语言支持(NLS)API参考
或者您可以查询注册表:
C:\>reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /f ACP
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
ACP REG_SZ 1252
End of search: 1 match(es) found.
C:\>
使用单字节字符时,ASCII格式定义前127个字符。128-255的扩展字符由各种ANSI代码页定义,以允许对其他语言的有限支持。为了理解ANSI编码的字符串,您需要知道它使用的代码页。
我记得当“ANSI”文中提到的伪VT-100换码在DOS的可使用通过ANSI.SYS驱动程序来改变文本流的流动....也许不是你指的是,但如果它看到HTTP: //en.wikipedia.org/wiki/ANSI_escape_code
ANSI(aka Windows-1252 / WinLatin1)是拉丁字母的字符编码,与ISO-8859-1非常相似。您可能需要在Wikipedia上进行查看。