QString 的 toHtmlEscaped 不起作用
QString's toHtmlEscaped doesn't work
我正在将带有一些非 ascii 字符的 QString
写入 html 文件,如下所示:
QString string = "äöü";
std::ofstream f("myfile.html");
f << "<h1>" << qPrintable(string.toHtmlEscaped()) << "</h1>\n";
所以我调用了 toHtmlEscaped()
,但是我得到了 äöü
。
更奇怪的是,使用这种特定方式将字符串写入文件并将该 HTML 文件打印为 PDF 会导致正确的编码。
我可能踩过的任何陷阱?
正如 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";
你想做的是像这样创建一个 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;
我正在将带有一些非 ascii 字符的 QString
写入 html 文件,如下所示:
QString string = "äöü";
std::ofstream f("myfile.html");
f << "<h1>" << qPrintable(string.toHtmlEscaped()) << "</h1>\n";
所以我调用了 toHtmlEscaped()
,但是我得到了 äöü
。
更奇怪的是,使用这种特定方式将字符串写入文件并将该 HTML 文件打印为 PDF 会导致正确的编码。
我可能踩过的任何陷阱?
正如 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";
你想做的是像这样创建一个 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;