什么是ANSI格式?


Answers:


245

ANSI编码是一个稍微通用的术语,用于指代系统(通常是Windows)上的标准代码页。在Western / US系统上,它更恰当地称为Windows-1252。(它可以表示其他系统上的某些其他Windows代码页。)这实质上是ASCII字符集扩展,因为它包括所有ASCII字符以及附加的128个字符代码。这种差异是由于以下事实造成的:“ ANSI”编码是8位而不是ASCII的7位(如今,几乎将ASCII编码为8位字节,而MSB设置为0)。有关为什么通常将这种编码称为ANSI的解释,请参见该文章。

名称“ ANSI”是一个误称,因为它与任何实际的ANSI标准都不对应,但是名称已被保留。ANSI与UTF-8不同。


42
ANSI不仅仅是一个“轻微”的误称,它是一个完全错误的名称。该名称清楚地表明,无论指的是ANSI标准,不是。这实际上是一个黑白问题。话虽如此,它是如此广泛地使用,以至于我们一直坚持下去。
Nate CK

1
我知道ANSI是代码页437,而不是Windows代码页1252。回到上面,当ANSI引用为公告板系统创建的图形时,我可以保证确实如此。
lordscarlet

@lordscarlet:ANSI尚未对它们进行标准化,但是Windows-1252是它的超集(至少在Windows上是)。请参阅en.wikipedia.org/wiki/ANSI_codepage#ANSI以获取参考。
Noldorin

4
“ ANSI”显然没有引用任何ANSI标准,但是事实上,在保存文件时,例如可以在记事本中选择“编码:ANSI”。实际的问题是:“这是什么意思”?到目前为止,这个答案是最好的。
Wernfried Domscheit,

1
就我而言,ANSI是指windows-1254
拉马赞·波拉特

59

从技术上讲,ANSI应该与US-ASCII相同。它指的是ANSI X3.4标准,该标准只是ANSI组织批准的ASCII版本。ASCII / ANSI未定义使用最高位字符集,因为它是7位字符集。

但是,DOS和随后的Windows社区多年来对该术语的滥用,使它的实际含义保留为“正在使用的任何计算机的系统代码页”。系统代码页有时也称为“ mbcs”,因为在东亚系统上可以是每个字符多个字节的编码。某些代码页甚至可以将高位清除字节用作多字节序列中的尾随字节,因此它甚至不与纯ASCII严格兼容……但即使如此,它仍被称为“ ANSI”。

在美国和西欧的默认设置上,“ ANSI”映射到Windows代码页1252。这与ISO-8859-1不同(尽管非常相似)。在其他机器上,可能根本没有其他任何东西。这使得“ ANSI”完全不能用作外部编码标识符。


32

严格来说,没有ANSI编码之类的东西。通俗地说,术语ANSI用于几种不同的编码:

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

那是错的。Windows代码页1252是根据ISO 8859-1创建的,但并不完全相等。术语ANSI指的是ISO 8859-x标准。
Patrik

17

曾几何时,Microsoft和其他所有人一样,都使用7位字符集,尽管他们将ASCII作为核心子集,但他们还是在7位字符集发明了自己的字符集。然后他们意识到世界已经转向8位编码,并且周围有了国际标准,例如ISO-8859系列。在那些日子里,如果您想掌握国际标准并住在美国,可以从美国国家标准学会ANSI购买,后者会用自己的品牌和编号重新发布国际标准(这是因为美国政府希望符合美国标准,而不是国际标准)。因此,Microsoft的ISO-8859副本的封面上标有“ ANSI”。而且由于当时微软还不太习惯标准,所以他们没有 意识到ANSI还发布了许多其他标准。因此,他们用封面上的名称“ ANSI”引用了ISO-8859家族中的标准(以及他们发明的变体,因为当时他们对标准不甚了解),并最终被微软使用。用户文档,从而进入用户社区。那是大约30年前的事,但是今天您仍然有时听到这个名字。


标准是行业的东西,所以程序员是一个新兴行业,因此对于标准来说是新手?
CoffeDeveloper 2015年

1
微软成立之初,这并不是一个新兴行业。
Michael Kay

总体而言,Microsoft对互操作性有问题和有争议的态度。当他们在1990年代后期决定“拥抱和扩展”标准而不是直接避免使用它们时,这是一个了不起的变化,尽管对于适当的互操作性而言,这仍然不是负责任的方法。(您可能会争辩说,如果仅遵守现有标准,就不可能取得进展,但这显然不是他们这样做的主要原因。)
Tripleee

14

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之间的连字符。(令人难以置信!谁在做类似的事情?!?)


5

基本上,“ ANSI”是指Windows上的旧版代码页。另请参阅Raymond Chen的有关该主题的文章

造成这种情况的原因是Windows代码页1252最初基于ANSI草案,该草案成为ISO标准8859-1。

在大多数代码页中,前127个字符与ASCII相同,但是较高的字符有所不同。

然而,ANSI并不会自动意味着CP1252或拉丁1。

尽管您感到困惑,但您现在应该只避免使用Unicode即可。


4

万一您的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:\>

2

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



-4

ANSI(aka Windows-1252 / WinLatin1)是拉丁字母的字符编码,与ISO-8859-1非常相似。您可能需要在Wikipedia上进行查看。


6
不是所有人都可以使用CP1252。这在很大程度上取决于该地区。
乔伊,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.