c++ - 从 XML 中读取德语文本并写入 PDF

标签 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 中。

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

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

最佳答案

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

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

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

关于c++ - 从 XML 中读取德语文本并写入 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41138389/

相关文章:

java - RuntimeWorkerException : Invalid nested tag head found, 预期结束标记元

PHP 创建可保存的 PDF

c++ - 部分类型作为模板参数 C++

c++ - 从链表的末尾而不是从头开始读取值 C++

c# - 使用奇怪的 namespace 序列化 XML?

xml - 如何加快从磁盘加载 XML 文档的速度?

html - 对学生隐藏 HTML

c++ - 变参函数,如何让它类型安全更有意义?

c++ - 用spirit x3解析递归规则

xml - 使用 BizTalk 实现 EDI