2012-04-20 61 views
0

我有一個「PARSE_ERROR」當我試圖解析包含特定的日語漢字的XML文件:如果我改變了漢字另一個錯誤在解析XML文件RapidXML

退

,解析效果很好。

有什麼想法?

PS:我用解析rapidXML

文件下面是XML文件的樣本:

<?xml version="1.0" encoding="UTF-8"?> 
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Exam.xsd"> 
    <Patient> 
    <ESUID>CRodrigueTest-20120423-104410</ESUID> 
    <Lastname>退</Lastname> 
    </Patient> 
</Root> 
+1

是XML UTF-8嗎?如果它是UTF-16或32,那麼RapidXml會遇到這些問題,您可以在這裏閱讀(http://rapidxml.sourceforge.net/manual.html#namespacerapidxml_1character_types_and_encodings)。確保您的文檔以RapidXml支持的方式進行編碼,並修改您的問題以包含有關XML文檔編碼的詳細信息。 – Cornstalks 2012-04-20 15:58:14

+0

是的,XML是UTF-8。我將在星期一附上xml文檔。 – 2012-04-20 19:38:51

+0

如果RapidXML正確地使用UTF-8編碼,則該XML對此XML沒有任何問題。顯示你的代碼,因爲我期望的問題是你如何使用Rapidxml。 – Roddy 2016-10-06 12:01:01

回答

0

這裏其實問題不在於與rapidXML庫。問題可能在basic_ifstream.basic_ifstream中,只能通過在ansi模式下打開defualt文件。所以我們必須將它設置爲utf-8。使用以下代碼片段:

basic_ifstream<wchar_t> fFileStream(fullxmlfilepath, ios::binary); 

    std::locale loc(std::locale::classic(), new std::codecvt_utf8<wchar_t>); 
    fFileStream.imbue(loc); 

    xmlFile = new rapidxml::file<wchar_t>(fFileStream); 
    doc.parse<parse_declaration_node>(xmlFile ->data()); 
+0

這是錯誤的,在幾個級別上:OP使用的是UTF-8,而不是UTF-16或32.UTF-8(因此所有unicode代碼點,包括日語,中文等)完全由rapidxml支持,所以有不需要使用不同的庫。 – Roddy 2016-10-06 11:58:07

+0

是的,你是對的羅迪。其實我找到了這個問題的根源。問題不在rapidxml庫中。在我的情況下,問題在於basic_ifstream。默認情況下,basic_ifstream僅以ansi模式打開文件。所以我們需要在utf-8模式下打開它。 – 2016-11-14 12:19:29

+0

在您現有的流中添加以下代碼行。 std :: locale loc(std :: locale :: classic(),new std :: codecvt_utf8 ); XMLFileStream.imbue(loc); – 2016-11-14 12:21:04