(Text-) 支持编码的文件

(Text-) File that supports encoding

我正在处理的项目采用 xml 文件和输入流,并将它们转换为 pdf 和文本。在单元测试中,我将此生成的文本与具有预期输出的 .txt 文件进行比较。

我现在面临的问题是这些 .txt 文件没有以 UTF-8 编码,并且在编写时没有保留此信息(即元音变音)。

我读过几篇关于持久化和编码 .txt 文件的文章。包括 correcting the encoding, saving and opening files in Visual Studio with encoding,还有一些。

我想知道是否有 text file format 支持有关编码的元信息,例如 xml 或 html。

我正在寻找一个解决方案:

Unicode 字节顺序标记 (BOM) 有时用于此目的。处理 Unicode 的系统在传递文本时需要剥离此元数据。 File.ReadAllText 等这样做。 BOM应该只存在于文件和流的开头。

BOM 有时与编码混为一谈,因为两者都会影响文件格式,而 BOM 仅适用于 Unicode 编码。在 Visual Studio 中,使用 UTF-8,它被称为 "Unicode (UTF-8 with signature) - Codepage 65001"。

演示这些概念的一些 C# 代码:

var path = Path.GetTempFileName() + ".txt";
File.WriteAllText(path, "Test", new UTF8Encoding(true, true));
Debug.Assert(File.ReadAllBytes(path).Length == 7);
Debug.Assert(File.ReadAllText(path).Length == 4); // slightly mushy encoding detection

但是,这并不能使任何人通过使用文本文件时所需的协议。基本规则是文本文件必须使用与写入时相同的编码来读取。 BOM 不是一种足以作为一般文本文件的完整协议的通信。

测试编辑器几乎普遍采用他们应该首先猜测文件的字符编码的原则,并且在大多数情况下允许用户稍后更正它们。一些带有项目系统的 IDE 允许记录文件实际使用的编码。

合理的文本编辑器会保留现有文件的编码和 Unicode BOM 的存在。

看来你是在追求一个通用的策略。不幸的是,文本文件概念的历史不允许这样。