c# - 通过文件系统从 XML 中解析和删除 BOM/Preamble
问题描述
我正在处理 XBRL 文件,并遇到了一堆在开始时具有字节顺序标记 (BOM) 的文件。如果我手动删除它,我可以毫无问题地处理该文件。
我曾多次尝试从我正在读取的 XML 文件的开头删除 BOM,但都失败了。
这是我收到的错误消息:
根级别的数据无效。第 1 行,位置 1。
最初我正在使用XDocument.Load(filename)
,但这失败并出现同样的错误,所以我在从Parsing xml string to an xml document 获得建议后修改了代码,如果字符串以 <?xml... ?> 部分开头没有成功。
void Main()
{
XDocument doc;
var @filename = @"C:\accounts\toprocess\2008\Prod224_8998_00741575_20080630.xml";
byte[] file = File.ReadAllBytes(filename);
using (MemoryStream memory = new MemoryStream(file))
{
using (XmlTextReader oReader = new XmlTextReader(memory))
{
doc = XDocument.Load(oReader);
}
}
}
XML 文件可以在这里找到:http ://s000.tinyupload.com/download.php?file_id=92333278767554773703&t=9233327876755477370347742
解决方案
C3 AF C2 BB C2 BF
看起来是双 UTF-8 编码的 BOM。BOM 的 UTF-8 编码是EF BB BF
. 如果您将它们中的每一个都视为一个单独的字符并使用 UTF-8 编码,那么您最终会得到您所看到的序列。
因此,您拥有的文件已损坏。某些东西正在获取包含 UTF-8 BOM 的文档并将其视为扩展 ASCII。如果您无法从源头获取文档,我倾向于在文件开头查找该特定序列并在存在时将其剥离。
如果有问题的文档使用其他扩展的 ASCII 字符,它们也很有可能被破坏。
推荐阅读
- pdf - 包含 Unicode 字符(跨越两个字节)的 PDF 注释未在 Firefox 中显示,但在 chrome 中工作正常
- python - 如何使用kivy每分钟调用一个函数?
- javascript - RxJS Observable forkJoin 未并行执行
- java - 选择sqlite android
- python-3.x - Python代码不断被杀死,很可能是由于内存不足,同时使用迭代制作列表
- java - 如何在 android studio 的 setOnItemClickListener 中返回一个函数?
- python - 将numpy数组合并到单个int
- node.js - React 和 Express - 本地主机上的 WebSocket 握手期间出错
- flutter - 一起为多个列表项设置动画(展开/折叠)
- javascript - 如何使用 php 将 mysql 数据库数据传递给 javascript 函数?