我正在将带有一些非ASCII字符的QString写入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;


无论如何,只要您使用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;

关于c++ - QString的toHtmlEscaped不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31629737/

10-09 13:37