2015-07-25 5 views
0

Я пишу QString с некоторыми персонажами не-ASCII в HTML-файл, например так:QString не работает

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

Так я называю toHtmlEscaped(), но тем не менее я получаю äöü. Более странно, используя этот особый способ записи строки в файл и печати этого HTML-файла в PDF, приводит к правильной кодировке.

Любые ловушки Я мог бы вмешаться?

+1

'äöü' выглядит как UTF-8 кодирование 'äöü', неверно истолкованное как латинское-1. Ваш код работает как ожидалось. –

+1

Почему вы используете макрос u8 здесь? QString не кодируется UTF-8, поэтому это не имеет большого смысла. – MrEricSir

+0

Спасибо, напомню, что в будущем – NaCl

ответ

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; 

В любом случае вы должны сохранить исходные файлы в кодировке UTF-8, пока вы работаете с Qt.


В обоих случаях вы можете использовать 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; 
0

Как отметил Игорь в комментариях, код должен работать должным образом, и я не вижу причин, почему это не должно. В любом случае я работал над этим, добавив <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"; 
Смежные вопросы