从XML读取德语文本并写入PDF

时间:2016-12-14 08:56:47

标签: c++ xml pdf pugixml

我有一个XML(UTF-8)。我必须使用 PugiXML 库从中读取std::string变量的值。读完该值后,我将其打印在控制台上,但在我的实际项目中,我必须将该值放入PDF(使用LibHaru库)。我的 MWE 如下:

#include <iostream>
#include "pugiconfig.hpp"
#include "pugixml.hpp"

using namespace pugi;

int main()
{   
    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file(FILEPATH);

    xml_node root_node = doc.child("Report");
    xml_node SystemName_node = root_node.child("SystemName");

    std::string strSystemName = SystemName_node.child_value();

    std::cout<<" The name of the system is: "<<strSystemName<<std::endl;

    return 0;
}

我正在使用 Pugixml 库从XML文件中读取变量std::string strSystemName的值。在阅读变量后,我将其打印在屏幕上(在我的实际项目中,我将其写入pdf文件)。 问题: 在调试过程中,我发现从XML文件(已经是UTF-8)中读取了奇怪的字符,如果我打印变量就会出现屏幕或将其放到pdf。

重要提示:打印到控制台并不太重要。重要的是将它正确地放在PDF文件中,该文件也使用UTF-8编码。但我认为将变量存储在std::string中会以某种方式产生问题,因此将wrone值传递给PDF编写器。

PS:我正在使用没有C ++ 11的 VS2010

1 个答案:

答案 0 :(得分:1)

这里的问题是std::cout只是将字符串中的UTF-8字节反映到控制台。通常在Windows上,控制台不是以UTF-8运行,而是在(例如)代码页1252中运行,因此UTF-8'ä`的两个字节显示为两个字符。

您的解决方案是将控制台转换为UTF-8(请参阅this answer),或将UTF-8字符串转换为CP-1252字符串。我认为这需要MultiByteToWideChar(指定UTF-8)+ WideCharToMultiByte(指定CP-1252)

要调试实际问题(将UTF-8字符串传递给pugixml),您需要查看字符串中的实际字节数,并检查它们是否符合您的想法。