微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将字符串转换为没有 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。