阅读 XML 中的德语文本并写入 PDF

Read German text from XML and write to a PDF

我有一个 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 中,它就会出现。

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

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

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

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

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