Rapidxml从COM对象读取Cyrillic

时间:2017-05-26 11:06:41

标签: c++ xml utf-8 com rapidxml

我试图解析包含西里尔字母的XML文件,并收到Parse错误:"意外的数据结束"

这是我用来解析的代码,以及我输入的catch语句。

rapidxml::xml_document<TCHAR> doc;
rapidxml::xml_node<TCHAR>* rootNode;

// Helping in the debug
// std::cout << nElementIndex << std::endl;

const int SIZE = 300;
LPWSTR indirectString = new wchar_t[SIZE];

TCHAR* temp = m_vecContainer[nElementIndex].xml.GetBuffer();

try 
{
    doc.parse<0>(&temp[0]);
}
catch (rapidxml::parse_error &e)
{
    return ERROR_INVALID_FUNCTION;
}

这是一个可以返回xml.GetBuffer()方法的例子:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Version>1.3.33.5</Version>
    <Description>Поддържа актуален софтуера ви от Google. Ако тази задача е деактивирана или спряна, софтуерът ви от Google няма да е актуален, което означава, че ако в сигурността възникне уязвимост, тя няма да бъде коригирана и е възможно някои функции да не работят. Тази задача се деинсталира сама, когато няма софтуер от Google, който да я използва.</Description>
    <URI>\GoogleUpdateTaskMachineCore</URI>
  </RegistrationInfo>
...
</Task>

有人可以帮助我,因为我在互联网上找不到任何有用的信息。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我不熟悉rapidxml,但快速搜索显示它默认处理utf8输入。所以,你的问题可能不是西里尔字母。我会专注于数据的意外结束&#39;请注意并确认XML feed遵守严格的XML规则。试试这些工具:

http://www.xmlvalidation.com/
http://www.utilities-online.info/xsdvalidation/#.WSgPG2iGOUk

如果您的XML有效,我很抱歉,我没有其他线索可以帮助您。

祝你好运!