有帮助吗?

解决方案

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

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

你可以使用:

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

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

Console.OutputEncoding

其他提示

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

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

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

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

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

你可以在这里阅读更多内容:
了解ASCII和ANSI字符
亚历克斯霍夫曼的ASCII与ANSI编码

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

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

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

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top