【问题标题】:(Text-) File that supports encoding(Text-) 支持编码的文件
【发布时间】:2018-07-12 12:47:43
【问题描述】:

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

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

我已经阅读了几篇关于持久化和编码.txt 文件的文章。包括correcting the encodingsaving and opening files in Visual Studio with encoding等等。

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

我正在寻找的解决方案是:

  • 易于适应同一团队中的任何同事
  • 它是持久的,不取决于我在编辑器中选择编码
  • 不需要任何额外的外来程序
  • 可以在不修改或只修改 File 类的情况下读取,它是 C# 的输入读取
  • 至少支持 UTF-8 编码

【问题讨论】:

  • 为什么不同意所有文本文件都是 UTF-8 格式?
  • 我认为这与其说是一个协议,不如说是一个配置问题。我看到了其中的可能性,但我认为支持注释的文件可能会更有帮助。

标签: file encoding utf-8 persistence file-type


【解决方案1】:

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

BOM 有时与编码混为一谈,因为两者都会影响文件格式,而 BOM 仅适用于 Unicode 编码。在 Visual Studio 中,使用 UTF-8,它被称为“Unicode(带签名的 UTF-8)-代码页 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 的存在。

您似乎在追求通用策略。不幸的是,文本文件概念的历史不允许这样做。

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2021-02-28
    相关资源
    最近更新 更多