什么是ANSI格式?

什么是ANSI编码格式? 这是一个系统默认格式? 它与ASCII有什么不同?

ANSI编码是一个稍微通用的术语,用于指代系统上的标准代码页,通常是Windows。 在西方/美国的系统上,它被更恰当地称为Windows-1252 。 (它可以代表其他系统上的某些其他Windows代码页 )。这实质上是ASCII字符集的扩展 ,它包含所有带有128个字符代码的ASCII字符。 这种差异是由于“ANSI”编码与ASCII码是8位而不是7位(现在几乎总是以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用于几种不同的编码:

  1. ISO 8859-1
  2. Windows CP1252
  3. Windows机器上的当前系统编码(在Win32 API术语中)。

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,主要是在范围为128到159的C1控制范围内进行修改。维基百科指出,Windows-1252也被称为ISO-8859-1连字符在ISO和8859之间。(难以置信!谁做了这样的事?!?)

曾几何时,微软和其他人一样,使用了7位字符集,并且在适合他们的时候自己发明了自己的字符集,尽管他们把ASCII作为核心子集。 然后他们意识到世界已经转向了8位编码,而且ISO-8859家族等国际标准也有。 在那个时候,如果你想获得一个国际标准,而且你住在美国,那么你从美国国家标准学会(American National Standards Institute,ANSI)那里买下了它,ANSI用他们自己的品牌和数字重新出版了国际标准(这是因为美国政府希望符合美国标准,而不是国际标准)。 所以微软的ISO-8859的副本在封面上说“ANSI”。 而且由于微软在当时并不习惯标准,所以他们并没有意识到ANSI也出版了很多其他的标准。 所以他们提到了ISO-8859家族的标准(以及他们发明的变种,因为他们当时不太了解标准),封面上的名字是“ANSI”,而且它已经进入了微软用户文档,从而进入用户社区。 那大概是三十年前的事了,但是你今天有时候还是听到这个名字的。

基本上“ANSI”是指Windows上的传统代码页。 另见雷蒙德·陈关于这个话题的文章 。 在大多数代码页中,前127个字符与ASCII相同,但是上面的字符不同。

但是,ANSI不会自动表示CP1252或Latin 1。

尽管你现在应该避免这样的问题,并使用Unicode,但所有的混淆。

当使用单字节字符时,ASCII格式定义了前127个字符。 128-255的扩展字符由各种ANSI代码页定义,以允许有限的支持其他语言。 为了理解ANSI编码的字符串,您需要知道它使用哪个代码页。

我记得当“ANSI”文本提到在DOS中通过ANSI.SYS驱动程序可用于改变流文本流的伪VT-100转义码….可能不是你所指的,但如果它是看到http: //en.wikipedia.org/wiki/ANSI_escape_code

如果您的电脑不是“西方”电脑,而且您不知道使用哪个代码页,则可以查看本页: 国家语言支持(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:\> 

ANSI (也称为Windows-1252 / WinLatin1)是拉丁字母的字符编码,与ISO-8859-1非常相似。 你可能想在维基百科上看看它 。