我有一个 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/