簡體   English   中英

TinyXML解析多字節字符,但跳過以下[x]個字符

[英]TinyXML parsing multi-byte characters but skipping following [x] chars

我有一個C ++程序,該程序從服務器接收一些xml,然后嘗試解析它以便填充一些組合框。

<?xml version="1.0"?>
    <CustomersMachines>
        <Customer name="bob" id="1">
            <Machine name="office1" id="1" />
            <Machine name="officeserver" id="2" />
        </Customer>
     </CustomersMachines>

對於這些值,TinyXML進行了很好的解析,並且生成的組合框按預期填充。 當將多字節字符放置在name元素的末尾(或取決於多少字節)時,就會出現問題。

<Customer name="boß" id="3">

將導致組合框中填充值boß“ id =

通過調試器的逐步調試,我看到當多字節字符傳遞給ReadText()時,元素中的以下1-3個單字節字符將被跳過,但會自動包含在內,因此tinyXML不會注冊結束引號並保持解析直到到達下一個。 在發送xml的服務器上運行的應用程序主要使用ISO-8859-1編碼,而tinyXML默認為UTF-8。

我嘗試將tinyxml調整為默認值以使用TIXML_ENCODING_UNKNOWN,這似乎可以解決問題,但會導致程序中其他地方出現大量問題。 我嘗試過的其他方法是在發送utf8_encode xml服務器端之前(但這會使奇怪的字符顯示在多字節char應該位於的組合框中),並強制將編碼發送到xml中。客戶端程序無濟於事。

在這種情況下,有人對如何防止多字節字符自動忽略以下1-3個字符有任何想法嗎?

<?xml?>序言未指定編碼。 如果無法通過帶外手段在XML外部使用編碼,則必須按照XML規范附錄F中概述的規則,通過分析XML的起始字節來猜測編碼。 在這種情況下,可能會導致選擇了UTF-8。 如果XML實際上不是UTF-8編碼的,則可以解釋您所看到的行為。

在ISO-8859-1中, ß編碼為字節八位字節0xDF"被編碼為字節八位字節0x22

在UTF-8中, 0xDF是2字節八位位組序列的開始字節,這說明了"被跳過。但是, 0xDF 0x22不是有效的UTF-8 2八位字節組序列,因此TinyXml應該解析失敗。如果沒有,那就是TinyXml中的錯誤。

如果XML實際上是ISO-8859-1編碼的,則服務器必須提供該信息。 如果不是,則表明服務器中存在錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM