QString的toHtmlEscaped不起作用

QString's toHtmlEscaped doesn't work

本文关键字:不起作用 toHtmlEscaped QString      更新时间:2023-10-16

我正在写一个QString与一些非ascii字符到一个html文件,像这样:

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

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

有没有我可能遇到的陷阱?

您需要做的是创建一个像这样的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;

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


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

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;

正如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";