我一直在编写代码来处理通过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怎么办?
看来,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。