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

#1 楼

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

名称“ ANSI”是一个不正确的名称,因为它与任何实际的ANSI标准都不对应,但是该名称具有卡住。 ANSI与UTF-8不同。

评论


我知道ANSI是代码页437,而不是Windows代码页1252。回到上面,当ANSI引用为公告板系统创建的图形时,我可以保证是这种情况。

–lordscarlet
13年8月21日在22:51

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

–诺多林
13年8月23日在12:11

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

– Wernfried Domscheit
18 Mar 15'在10:23



就我而言,ANSI是指Windows-1254。

–Ramazan Polat
19-10-11在17:46

注释中有关“实际”含义的讨论很好地说明了此非术语为何有问题;它的定义不明确。

–tripleee
8月16日8:41

#2 楼

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

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

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

#3 楼

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


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


评论


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

–帕特里克(Patrik)
1月10日11:58

@Patrik不,不是。在某些情况下,这种解释实际上是正确的,但是正如此处的其他答案清楚地说明了这一点,如果没有其他上下文,您将无法真正分辨出来。

–tripleee
8月16日8:45



#4 楼

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

评论


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

–CoffeDeveloper
2015年3月3日14:44



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

–麦凯(Michael Kay)
2015年3月3日19:57



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

–tripleee
18年6月1日在6:26



#5 楼

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,在ISO和8859之间带有第二个连字符。(不可思议!谁会做类似的事情?!?)

#6 楼

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


源于以下事实:Windows代码页1252最初基于ANSI草案,已成为ISO标准8859 -1。


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

但是,ANSI并不自动意味着CP1252或拉丁语1。

尽管今天您应该避免出现此类问题并使用Unicode。

#7 楼

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


#8 楼

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

#9 楼

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

#10 楼

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

评论


不是所有人都可以使用CP1252。这在很大程度上取决于该地区。

–乔伊
13年1月24日在6:06