这里的CharacterSet之间有什么关系:
http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx
和ascii编码在这里:
http://msdn.microsoft.com/en-us/library/system.text.asciiencoding.getbytes(VS.71).aspx
答案 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
可以是ANSI
或OEM
。
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