tinyxml解析UTF 8字符集的xml

2021-06-22 10:49:03 字數 2817 閱讀 9092

今天在程式中遇到,當通訊的xml裡面含有中文字元的時候,tinyxml解析時總是報錯,不能進行解析,查詢原因後發現是tinyxml在解析utf-8字符集的xml時,需要特殊指定字符集才行,下面是對於讀取檔案和直接解析字串所需的tinyxml函式的使用方式。

一、需解析的xml

<?xml version="1.0" encoding="utf-8"?>21

0全天侯模板

111111111111111111111111111111111111111111111110

111111111111111111111111111111111111111111111110

111111111111111111111111111111111111111111111110

111111111111111111111111111111111111111111111110

111111111111111111111111111111111111111111111110

111111111111111111111111111111111111111111111110

111111111111111111111111111111111111111111111110

220工作日模板

000000000000000000111111111111111110000000000000

000000000000000000111111111111111110000000000000

000000000000000000111111111111111110000000000000

000000000000000000111111111111111110000000000000

000000000000000000111111111111111110000000000000

000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000

二、讀取xml檔案,tinyxml處理方式

tixmldocument *xmlfile= new tixmldocument(filepath);

xmlfile->loadfile(tixml_encoding_utf8);

三、讀取xml字串,tinyxml處理方式

tixmldocument mydocument;

mydocument.parse(xmlparament,0,tixml_encoding_utf8);

//或者mydocument.parse(xmlparament,0,tixml_encoding_legacy);

if( !mydocument.error() )

tixmlelement* schedtemplele = paramentele->firstchildelement("schedtempl");

while(schedtemplele)

}

說明(引用官方的翻譯)

一般地,tinyxml 試著檢測正確的編碼方式並使用它。但是,可以通過在標頭檔案中設定 tixml_default_encoding 的值來強制使用某一種編碼方式。

tinyxml 將要假設一種合法模式,直到一下的其中之一發生:

1)如果不是標準的,但是 utf-8 帶頭位元組(utf-8 lead bytes)出現在檔案或資料流的頭部,tinyxml 將按照 utf-8 的編碼方式讀取。

2)如果宣告的標籤被讀取,並且它有個 encoding="utf-8",則按照 utf-8 編碼方式讀取。

3)如果宣告的標籤被讀取,它沒有特殊的編碼,則按照 utf-8 編碼。

4)如果宣告表中是 encoding="something else",tinyxml 將其讀作為合法模式(legacy mode)。在合法模式中,tinyxml 和以前工作一樣。不清楚具體是哪種模式,老的內容應該保持工作。

5)直到上面的一種準則滿足,tinyxml 按照合法模式執行。

如果編碼是不正確的,或者被檢測出來將要發生什麼?tinyxml 將其看做不合適的編碼。你可能得到的是不正確的結果或亂碼。你可能想強制 tinyxml 變為正確的模式。

這一通過 loadfile( tixml_encoding_legacy ) 或者 loadfile( filename, tixml_encoding_legacy ) 的方式強制 tinyxml 設定為合法模式。你可以設定 tixml_default_encoding = tixml_encoding_legacy 來一直使用合法模式。同樣地,你也可以使用同樣的技術將其設定為 tixml_encoding_utf8。

對於英語使用者,使用英文的 xml,utf-8 與 low-ascii 是一樣的,你不需要檢測 utf-8 或者改變你的**。可以將 utf-8 看做 ascii 的乙個超集。

utf-8 不是雙位元組格式,但是它是 unicode 的標準編碼。

tinyxml 不使用和直接同時支援 wchar, tchar, 或者 微軟的 _unicode。

用 unicode 指代 utf-16 是不合適的,utf-16 是 unicode 的一種寬位元組編碼方式。這引起了混亂。

對於 high-ascii 語言,tinyxml 可以處理所有的語言,同時,只要 xml 被編碼成 utf-8。這樣有些滑稽,老的程式設計師和作業系統趨向於使用 default 和 traditional 的**頁。許多應用可以輸出 utf-8,但是老或者頑固的應用是以預設的**頁輸出文字的。

對轉換編碼做了很好的介紹

UTF 8字元處理

參考 utf 8格式位元組 4中情況分別是 1 乙個位元組 0 x,低7位為有效資料,內碼是0x0 0x7f 2 兩個位元組 110 xx 10yyyyyy,低5位 低6位為有效資料,內碼是0x80 0x7ff 3 三個位元組 1110 x 10yyyyyy 10zzzzzz,低4位 低6位 低6位...

PHP正確解析UTF 8字串

在 學習php mysql之 字元編碼篇 一 中介紹了unicode與utf 8的轉換關係,總結了乙個utf 8的編碼規則,根據這個編碼規則,寫乙個utf 8編碼的解析程式,以下是php的實現 view code 程式功能,str是中英文混合的utf 8編碼字串,將此字串根據utf 8的編碼規則正確...

Python去除文字中非utf8字元

在處理文件相關專案中,經常會碰到utf8的非法字元,例如使用者上傳乙個檔案,系統根據使用者檔案產生相應結果返回。如果使用者檔案 utf編碼的csv檔案 中有utf8的非法字元,需要程式能自動去掉這些字元,因為這些字元也是無意義的。錯誤資訊 utf 8 codec can t decode byte ...