将字符串转换为没有 BOM 的 UTF8 (VB.NET)

问题描述

我在编写 XML 解析器/合并器时遇到问题,有一个使用 UTF8-BOM 编码的 XML,我在使用 XElement.Parse 时遇到错误。但是,如果我将该文件转换为没有 BOM 的 UTF8,它就可以解决问题。

错误为“-{”根级别的数据无效。第 1 行,位置 1。"}"。

此 XML 从 SOAP API 下载到字节流,然后转换为如下所示的字符串:

Dim sourceFile_as_Byte = SOAPAPI.Download 'I download the file using a SOAP API method.
Dim ByteEncoder As System.Text.Encoding = System.Text.Encoding.UTF8
SourceFile_as_string = ByteEncoder.GetString(SourceFile_as_Byte)
Dim XMLdoc As XElement
XMLdoc = XElement.Parse(SourceFile_as_string)

我发现了其他解决方案,例如使用 XElement.Load 无论如何都可以工作(似乎 .Load 管理编码?)但由于解决方案的性质,我需要使用 Parse 方法,这就是我尝试转换的原因该字符串并删除 BOM。

谢谢

解决方法

已知

Encoding.UTF8.GetString() / GetChars() 还在它从传递给方法的字节数组创建的字符串中包含 BOM(您可以看到,当源文件是与 BOM 一起保存)。
您可以使用 TrimStart() 方法删除字符,以防它在那里。
Unicode 字符是 \uFEFFChrW(&HFEFF)

Dim sourceBytes = SOAPAPI.Download
Dim xml = Encoding.UTF8.GetString(sourceBytes).TrimStart(ChrW(&HFEFF))
Dim xmlDoc = XElement.Parse(xml)