处理字节顺序标记

问题描述 投票:2回答:1

我一直在编写代码来处理通过Web服务API下载的xml。我一直没事,直到一个查询在根元素之前有一些神秘的字符。

联系支持人员后,我收到以下消息...“ ABS.Stat API生成的XML输出符合UTF-8。这些字符是UTF-8字节顺序标记,旨在将xml标识为UTF-8。希望这会有所帮助。”

在等待他们的答复时,我通过以下代码在开始标记(第一个“

Dim lgRootElementStart As Long
lgRootElementStart = InStr(1, hReq.ResponseText, "<")
Dim sgResponse As String
sgResponse = Mid(hReq.ResponseText, lgRootElementStart)

Dim xmlDoc As New MSXML2.DOMDocument
If Not xmlDoc.LoadXML(sgResponse) Then
    etc. etc. etc.

一切似乎都很好,数据已解密并可以正常显示。

但是现在我知道那些字符是什么,这些字符我应该做些什么?或者换一种说法,我可以用那些字符做些什么来使我的excel应用程序更可靠?即,既然我知道XML是UTF-8,我应该如何对其进行不同的处理?

如果BOM给UTF-16怎么办?

excel vba dom
1个回答
0
投票

看来,BOM似乎比有用多了,但我在应用程序中放置了代码,以检查是否在xml根元素之前收到了任何字符,这是UTF8 BOM。如果不是UTF8 BOM,则将引发错误。我不希望这再成为问题,但是如果我看到错误,那么我将不得不重新分析正在发生的事情。希望那永远不会发生。代码是...

Public Const BOM_UTF8 As String = ""

If lgRootElementStart > 1 Then
    If Left(hReq.ResponseText, lgRootElementStart - 1) = BOM_UTF8 Then
    Else
        Err.Raise ERROR_SHOULD_NEVER_HAPPEN, sFunctionName, _
            "Non UTF8 BOM found. " _
            & "BOM is ..." & ConvertToHex(Left(hReq.ResponseText, lgRootElementStart - 1)) _
            & ", correct BOM is ... " & ConvertToHex(BOM_UTF8)
    End If
End If

评论中一个链接的引号说...“编码应该是已知的,而不是不可分割的”。有了这段代码,我知道如果我知道它就是UTF8。

© www.soinside.com 2019 - 2024. All rights reserved.