.NET编码与Characterset之间的关系

时间:2009-11-28 09:40:44

标签: c# character-encoding codepages

5 个答案:

答案 0 :(得分:8)

ANSI是当前的Windows ANSI代码页,相当于Encoding.Default。

OEM是控制台应用程序通常使用的当前OEM代码页。

你可以使用:

Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage)

在控制台应用程序中,OEM编码也可以使用

Console.OutputEncoding

答案 1 :(得分:2)

这真的非常古老。 ODBC从石器时代开始,当Windows开始从MS-DOS接管时。当时,许多文本仍在原始IBM-PC字符集中编码,由Microsoft命名为“OEM字符集”。标准的IBM-PC集在上半部分有一些重音字符和伪图形字形,代码为0x80-0xff。

对于非英语语言的文本输出太有限,Microsoft开始使用代码页,适合某个语言组的字符字形范围。美国英语字符集由ANSI标准化,该标签现在(错误地)附加到任何非OEM代码页。

没有人再对OEM字符集中的文本进行编码,它至少在十年前就像渡渡鸟一样。这里正确的设置是ANSI。并保持手指在背后交叉,用于编码文本的代码页与系统的默认代码页匹配。那也是渡渡鸟,Unicode解决了它。

答案 2 :(得分:1)

对你的问题的简短回答,没有直接的关系。

较长的版本:
“Schema.ini”文件的CharacterSet可以是ANSIOEM
ANSI和ASCII指的是不同的东西。

你可以在这里阅读更多内容:
Understanding ASCII and ANSI Characters
ASCII vs ANSI Encoding by Alex Hoffman

答案 3 :(得分:1)

根据我的理解,CharacterSet = ANSI相当于Encoding.Default。那么OEM可能是ASCIIEncoding。

但是,ANSI使用系统ANSI代码页,因此如果从具有不同代码页的计算机访问同一文件,则可能会出现不兼容。

答案 4 :(得分:0)

我编译了自己的引用,以便在两者之间切换:

Windows code page       Name            System.Text.Encoding    schema.ini CharacterSet
20127                   ASCII (US)      ASCII                   20127
1252                    ANSI Latin I    Default                 ANSI
65001                   UTF-8           UTF8                    65001
1200                    UTF-16 LE       Unicode                 Unicode
1201                    UTF-16 BE       BigEndianUnicode        1201