我正在处理的项目将xml文件和输入流转换为pdf和文本。在单元测试中,我将生成的文本与具有预期输出的body{
background-image:linear-gradient(to right, transparent 50%, orange 50%), url('https://material.angular.io/assets/img/examples/shiba1.jpg');
}
文件进行比较。
我现在面临的问题是这些.txt
文件没有以UTF-8编码,并且编写时没有保留此信息(即变音符号)。
我读过几篇关于持久化和编码.txt
文件的文章。包括correcting the encoding,saving and opening files in Visual Studio with encoding等。
我想知道是否有.txt
支持例如xml或html这样的有关编码的元信息。
我正在寻找的解决方案是:
text file format
类就可以读取它,它是C#的输入读取答案 0 :(得分:1)
有时将Unicode字节顺序标记(BOM)用于此目的。当传递文本时,要求处理Unicode的系统剥离此元数据。 File.ReadAllText
等执行此操作。 BOM应该仅存在于文件和流的开头。
BOM有时会与编码混淆,因为两者都会影响文件格式,并且BOM仅适用于Unicode编码。在带有UTF-8的Visual Studio中,它称为“ 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的存在。
您似乎在追求通用策略。不幸的是,文本文件概念的历史不允许。