什么是ANSI编码格式?它是系统默认的格式吗?它与ASCII有何不同之处?
什么是ANSI编码格式?它是系统默认的格式吗?它与ASCII有何不同之处?
ANSI编码是一个通用术语,用于指代系统上的标准代码页,通常在Windows系统中使用。在西方/美国系统中,更应该称其为Windows-1252. (它可以在其他系统上表示某些其他Windows代码页)。本质上,这是ASCII字符集的扩展,因为它包括所有ASCII字符和额外的128个字符代码。这种差异是因为“ANSI”编码是8位而不是7位(现今几乎总是将ASCII编码为具有设置为0的MSB的8位字节)。请参阅文章以了解通常将此编码称为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”这个术语表示几种不同的编码方式:
ASCII只定义了一个由128个符号组成的7位码页。ANSI将其扩展到8位,对于符号128到255有几个不同的代码页。
称之为ANSI是不正确的,因为实际上是ISO/IEC 8859标准定义了这些代码页。有16个代码页ISO/IEC 8859-1到ISO/IEC 8859-16。请参见ISO/IEC 8859了解更多信息。
Windows-1252再次基于ISO/IEC 8859-1,并在128到159范围内的C1控制集中进行了一些修改。维基百科指出Windows-1252也被称为带有ISO和8859之间第二连字符的ISO-8859-1。(难以置信!谁会这么做?!)
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(又称为Windows-1252/WinLatin1)是拉丁字母的字符编码,与ISO-8859-1相当相似。您可以在维基百科上查看它。
windows-1254
。 - ramazan polat