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



我正在尝试为遗留系统创建一个平面文件,他们要求以MS DOS的文本编码呈现的数据.txt文件(文本文档 - MS-DOS格式CP_OEM)。我在 C#(.net4.0 框架)中使用 UTF8Encoding 类生成的文件之间有点困惑,我认为它会在默认的 txt 文件(编码:CP_ACP)中生成一个文件。

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

如果我在C#库中使用UTF8Encode类来创建文本文件(如下所示),它将采用MS DOS txt文件格式吗?

byte[] title = new UTF8Encoding(true).GetBytes("New Text File");

根据提供的答案,很明显 UTF8 不等同于 MSDOS txt 格式,应该使用 Encoding.GetEncoding(850) 方法来获取编码库。

我阅读了以下帖子以检查我的信息,但还没有结论。 https://blogs.msdn.microsoft.com/oldnewthing/20120220-00?p=8273

https://blog.mh-nexus.de/2015/01/character-encoding-confusion

https://blogs.msdn.microsoft.com/oldnewthing/20090115-00?p=19483

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

你可以使用File.ReadXY(String, Encoding)File.WriteXY(String, String[], Encoding)方法,其中XY分别是AllLinesLinesAllText分别使用string[]IEnumerable<string>string

MS-DOS 使用不同的代码页。代码页 850"西欧/拉丁语-1"或代码页 437"OEM-US/OEM/PC-8/DOS 拉丁美洲美国"(如@HansPassant建议的那样)可能没问题。如果您不确定需要哪个代码页,请使用旧系统创建包含 ä、ö、ü、é、è、ê、ç、à 或希腊字母等字母的示例文件,看看它们是否有效。如果不使用此类字母或其他特殊字符,则代码页不是很关键。

File.WriteAllText(path, "Hello World", Encoding.GetEncoding(850));

对于 ANSI 和 UTF-8,从 0 到 127(7 位)的字符代码对于所有 MS-DOS 代码页都是相同的。UTF 文件有时会引入 BOM(字节顺序标记)。

MS-DOS 只知道 8 位字符。代码 128 到 255 因不同的国家代码页而异。

请参阅:文件类、编码类和维基百科:代码页。

最新更新