使用C#创建MS-DOS txt文件时使用的编码是什么(UTF8编码与编码)

使用C#创建MS-DOS txt文件时使用的编码是什么(UTF8编码与编码),c#,windows,utf-8,character-encoding,C#,Windows,Utf 8,Character Encoding,我正在尝试为遗留系统创建一个平面文件,他们要求数据以MS DOS.txt文件(文本文档-MS-DOS格式CP_OEM)的文本编码形式显示。在C#(.net4.0框架)中使用UTF8Encoding类生成的文件和在默认txt文件(编码:CP#u ACP)中生成的文件之间,我有点混淆 我认为编码名称CP_ACP、Winodows和ANSI指的是同一件事,Windows默认值是ANSI,它将省略任何unicode字符信息 如果我使用C#library中的UTF8Encoding类创建一个文本文件(如下

我正在尝试为遗留系统创建一个平面文件,他们要求数据以MS DOS.txt文件(文本文档-MS-DOS格式CP_OEM)的文本编码形式显示。在C#(.net4.0框架)中使用UTF8Encoding类生成的文件和在默认txt文件(编码:CP#u ACP)中生成的文件之间,我有点混淆

我认为编码名称CP_ACP、Winodows和ANSI指的是同一件事,Windows默认值是ANSI,它将省略任何unicode字符信息

如果我使用C#library中的UTF8Encoding类创建一个文本文件(如下所示),它会是MS DOS txt文件格式吗

byte[] title = new UTF8Encoding(true).GetBytes("New Text File");
根据提供的答案,UTF8显然不等同于MSDOS txt格式,应该使用Encoding.GetEncoding(850)方法来获取编码库

我阅读了下面的帖子来检查我的信息,但没有任何结论。


最后的结论是,在创建要转换回实际文件的字节数组时使用Encoding.GetEncoding(850)(注意:我使用字节数组是因为我可以利用现有的中间件)。

您可以使用
file.ReadXY(字符串, 编码)
文件.WriteXY(字符串, 字符串[], 编码)
方法,其中
XY
分别是
AllLines
Lines
AllText
处理
string[]
IEnumerable
string

MS-DOS使用不同的代码页。或许代码页850“西欧/拉丁语-1”或代码页437“OEM-US/OEM/PC-8/DOS拉丁语-US”(如@HansPassant所示)可以。如果您不确定需要哪个代码页,请使用遗留系统创建包含ä,ö,ü,é,è,è,ç或希腊字母的示例文件,并查看它们是否有效。如果不使用此类字母或其他特殊字符,则代码页不是很重要

File.WriteAllText(path, "Hello World", Encoding.GetEncoding(850));
对于ANSI和UTF-8,0到127(7位)的字符代码对于所有MS-DOS代码页都是相同的。UTF文件有时引入BOM(字节顺序标记)

MS-DOS只知道8位字符。对于不同的国家代码页,代码128至255有所不同


请参阅:、和。

所以您建议UTF8Encoding类不生成MS DOS文本文件?UTF-8 iAssembles ANSI用于前256个字符,但可以包含更多字符,包括中文、泰文、埃及象形文字等。MS-DOS编码显然不同。它们通常包含方框图字符。新编码(850)在.net 4.0框架中不起作用,因为编码类是抽象的class@linodh,是的,实际上,我们必须使用工厂方法
GetEncoding
。感谢您指出。是的,了解AUS的代码页很有用,另一个简单的问题是,Tab char是否是用于这些平面文件类型的分隔符(通常我指的是允许遗留系统处理)?为什么对此投反对票?