【发布时间】:2021-12-21 10:46:50
【问题描述】:
我有一个 XML 文件,文件开头带有 UTF-8 BOM,这妨碍了我使用现有代码读取 UTF-8 文件。
如何轻松地从 XML 文件中删除 BOM?
这里我有一个Byte 类型的变量xmlfile,我将其转换为string。 xmlfile 包含整个 XML 文件。
byte[] xmlfile = ((Byte[])myReader["xmlSQL"]);
string xmlstring = Encoding.UTF8.GetString(xmlfile);
【问题讨论】:
-
您显示的代码根本不使用
XMLReader- 该代码是否失败,或者是您未向我们显示的某些代码?异常是什么样的?无论如何,我希望 XMLReader 能够处理 BOM... -
对不起,好问题。没有 xmlreader 只是读取 xml 文件内容以查找命名空间的函数的一部分。效果很好,我的问题是我无法读取 utf-8bom 文件。因为文件前面的这些字符。所以我需要删除那些,以便我可以使用 xmlreader。所以它可以使用 xmlfile 作为字节或 xmlstring 作为字符串来删除 BOM
-
请编辑您的问题,使其更加更清晰。理想情况下,提供minimal reproducible example。 “我无法读取 utf-8bom 文件”确实没有为我们提供几乎关于您所面临的错误的足够信息。请参阅codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question 获取有关如何写出好问题的建议。
-
不要使用
Encoding.UTF8.GetString,而是使用StreamReader,它会自动消耗BOM。如Encoding.UTF8.GetString doesn't take into account the Preamble/BOM 和How do I ignore the UTF-8 Byte Order Marker in String comparisons? 所示。更好的是,您可以将StreamReader直接传递给XmlReader,避免浪费中间xmlstring表示。或者将包含字节的MemoryStream传递给也应该消耗BOM 的XmlReader。 -
XML 文件保存为 xmlfile,稍后转换为 xmlstring 作为字符串。你能从中删除BOM字符吗?