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

时间:2016-11-24 22:57:39

标签: c# windows utf-8 character-encoding

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

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

如果我在C#库中使用UTF8Encoding类来创建文本文件(如下所示),它是否将采用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)(注意:我使用字节数组,因为我可以利用现有的中间件)。

1 个答案:

答案 0 :(得分:2)

您可以使用File.ReadXY(String, Encoding)File.WriteXY(String, String[], Encoding)方法,其中XYAllLinesLinesAllText使用{{1}分别是{},string[]IEnumerable<string>

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

string

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

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

请参阅:File ClassEncoding ClassWikipedia: Code Page

相关问题