【问题标题】:What encoding be used to create MS-DOS txt file using C#(UTF8Encoding vs Encoding)使用 C#(UTF8Encoding 与 Encoding)创建 MS-DOS txt 文件的编码是什么
【发布时间】:2017-04-09 07:06:36
【问题描述】:

我正在尝试为旧系统创建平面文件,他们要求数据以 MS DOS .txt 文件(文本文档 - MS-DOS 格式 CP_OEM)的 TextEncoding 显示。我对在 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)(注意:我使用的是字节数组,因为我可以利用现有的中间件)。

【问题讨论】:

  • 是的,了解 AUS 的代码页和另一个稍微无关的快速代码页很有用,Tab char 是与这些平面文件类型一起使用的分隔符吗(通常我的意思是允许遗留系统处理)?
  • 为什么会有反对票?

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


【解决方案1】:

您可以使用File.ReadXY(String, Encoding)File.WriteXY(String, String[], Encoding) 方法,其中XYAllLinesLinesAllText,分别与string[]IEnumerable<string>string 一起使用。

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

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

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

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

请参阅:File ClassEncoding ClassWikipedia: Code Page

【讨论】:

  • 所以你是在暗示 UTF8Encoding 类不会生成 MS DOS 文本文件?
  • UTF-8 与 ANSI 的前 256 个字符类似,但可以包含更多字符,包括中文、泰文、埃及象形文字等等。 MS-DOS 编码明显不同。它们通常包含画框字符。
  • new Encoding(850) 在 .net 4.0 框架中不起作用,因为 Encoding 类是抽象类
  • @linodh,是的,确实,我们必须使用工厂方法GetEncoding。感谢您指出。
猜你喜欢
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
相关资源
最近更新 更多