什么是ANSI格式?

web*_*nia 204 ascii ansi character-encoding codepages

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

Nol*_*rin 228

ANSI编码是一个稍微通用的术语,用于指代系统上的标准代码页,通常是Windows.在西方/美国系统上,它更适合称为Windows-1252.(它可以代表其他系统上的某些其他Windows代码页.)这实际上是ASCII字符集扩展,因为它包含所有带有128个字符代码的ASCII字符.这种差异是由于"ANSI"编码是8位而不是7位,因为ASCII是(ASCII现在几乎总是编码为8位字节,MSB设置为0).请参阅文章,了解为何此编码通常称为ANSI.

名称"ANSI"用词不当,因为它不符合任何实际的ANSI标准,但名称已卡住.ANSI与UTF-8不同.

  • ANSI不仅仅是一个"轻微"的误称,它是一个完全错误的名称.这个名称清楚地表明,无论它指的是ANSI标准,它都不是; 这是事实上的黑白问题.话虽如此,它被广泛使用,我们坚持使用它. (37认同)
  • "ANSI"显然不是指任何ANSI标准,但事实上,在保存文件时,您可以在记事本中选择"编码:ANSI".实际的问题是:"它是什么意思"?这个答案是迄今为止最好的答案. (3认同)
  • 是的,尽管“仅”在现代传统定义中,但即便如此,在像这样的上下文中偶尔也会有一些灵活性。请参见维基百科:“从历史上看,字节是用于在计算机中编码单个文本字符的位数”。 (3认同)
  • 我知道 ANSI 是代码页 437,而不是 Windows 代码页 1252。当 ANSI 提到为公告板系统创建的图形时,我几乎可以保证就是这种情况。 (2认同)
  • 就我而言,ANSI 指的是“windows-1254”。 (2认同)
  • 评论中关于它“实际上”含义的讨论很好地说明了为什么这个非术语是有问题的;*它没有明确定义。* (2认同)

bob*_*nce 57

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

然而,DOS和随后的Windows社区多年来滥用该术语已经将其实际意义留作"正在使用的任何机器的系统代码页".系统代码页有时也称为"mbcs",因为在东亚系统上可以是每字符多字节编码.有些代码页甚至可以在多字节序列中使用最高位清除字节作为尾随字节,因此它甚至不能与纯ASCII严格兼容......但即便如此,它仍称为"ANSI".

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


Nem*_*vic 32

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

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

  • @帕特里克不,事实并非如此。在某些情况下,这种解释实际上是正确的,但正如这个和其他几个答案生动地说明的那样,如果没有额外的上下文,您就无法真正判断。 (3认同)

Mic*_*Kay 15

曾几何时,微软和其他所有人一样,使用7位字符集,并且在适合它们的时候发明了自己的,尽管它们将ASCII作为核心子集.然后他们意识到世界已经转向8位编码,并且有国际标准,例如ISO-8859系列.在那些日子里,如果你想获得一个国际标准并且你住在美国,你是从美国国家标准协会ANSI购买的,他们用他们自己的品牌和数字重新发布国际标准(这是因为美国政府想要符合美国标准,而非国际标准).所以微软的ISO-8859副本在封面上说"ANSI".而且由于微软当时并不习惯标准,他们也没有意识到ANSI也发布了很多其他标准.因此,他们通过封面上的名称"ANSI"引用了ISO-8859系列中的标准(以及他们发明的变体,因为他们当时并不真正理解标准),并且它进入了微软用户文档,因此进入用户社区.这是大约30年前,但你有时仍然听到这个名字.


Dan*_*ner 13

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之间的连字符.(难以置信!谁做的那样?!?)


Joe*_*oey 5

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

其根源在于 Windows 代码页 1252 最初基于 ANSI 草案,该草案后来成为 ISO 标准 8859-1。

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

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

尽管您现在应该简单地避免此类问题并使用 Unicode,但仍然存在所有混淆。


Wer*_*eit 5

如果您的 PC 不是“西方”PC 并且您不知道使用哪个代码页,您可以查看此页面:National Language Support (NLS) API Reference

[Microsoft 删除了此参考,将其从网络存档国家语言支持 (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:\>
Run Code Online (Sandbox Code Playgroud)