阅读 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),您需要查看字符串中的实际字节,并检查它们是否符合您的想法是。
我有一个 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),您需要查看字符串中的实际字节,并检查它们是否符合您的想法是。