2012-04-20 106 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