QString到HTMLEscaped并不起作用

时间:2015-07-25 18:25:01

标签: c++ qt encoding qt5

我正在将一个带有非ascii字符的QString写入html文件,如下所示:

QString string = "äöü";
std::ofstream f("myfile.html");
f << "<h1>" << qPrintable(string.toHtmlEscaped()) << "</h1>\n";

所以我致电toHtmlEscaped(),但我得到äöü。 更奇怪的是,使用这种特殊方式将字符串写入文件并将该HTML文件打印到PDF会导致正确的编码。

我可能介入的任何陷阱?

2 个答案:

答案 0 :(得分:1)

你想要做的就是创建一个像这样的UTF-8文档:

QString string = "äöü";
std::ofstream f("myfile.html");
f << "<head><meta charset=\"utf-8\"/></head>" << std::endl;
f << "<h1>" << string.toStdString() << "</h1>" << std::endl;

或创建像这样的Latin-1文档

QString string = "äöü";
std::ofstream f("myfile.html");
f << "<h1>" << string.toLatin1().data() << "</h1>" << std::endl;

在任何情况下,只要您使用Qt,就必须保存源文件UTF-8编码。

在这两种情况下,您都可以使用toHtmlEscaped来转义<>&"

QString string = "äöü<no-tag>";
std::ofstream f("myfile.html");
f << "<head><meta charset=\"utf-8\"/></head>" << std::endl;
f << "<h1>" << string.toHtmlEscaped().toStdString() << "</h1>" << std::endl;

QString string = "äöü<no-tag>";
std::ofstream f("myfile.html");
f << "<h1>" << string.toHtmlEscaped().toLatin1().data() << "</h1>" << std::endl;

答案 1 :(得分:0)

正如Igor在评论中提到的,代码应该按预期工作,我看不出有什么理由不应该这样做。无论如何,我通过将<meta charset="utf-8"/>添加到HTML文件中来解决这个问题。代码现在只是

QString string = u8"äöü";
std::ofstream f("myfile.html");
f << "<head><meta charset="utf-8"/></head>\n";
f << "<h1>" << qPrintable(string) << "</h1>\n";