Я читаю HTML файл. Файл в основном содержит Unicode тексты следующим образом:
<b>akko- sati (ā + kruś), akkhāti (ā + khyā), abbahati (ā + bṛh)</b>
Но QTextBrowser не интерпретирует Unicode шрифты. Итак QTextBrowser показывает их следующим образом:
akko- sati (Ä + kruÅ›), akkhÄti (Ä + khyÄ), abbahati (Ä + bá¹›h)
QTextBrowser правильно интерпретировать HTML теги. Но что не так с Unicode шрифты?
Ниже приведены мои коды для чтения и заполнения содержимого Unicode:
void MainWindow::populateTextBrowser(const QModelIndex &index)
{
QFile file("Data\\" + index.data().toString() + ".html");
if (!file.open(QFile::ReadOnly | QFile::Text)) {
statusBar()->showMessage("Cannot open file: " + file.fileName());
}
QTextStream textStream1(&file);
QString string = "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><link rel='stylesheet' type='text/css' href='Data/Accessories/qss.css' />";
string += textStream1.readAll();
ui->textBrowser->setHtml(string);
}
Однако, если я не читаю Unicode содержание из HTML файл, но непосредственно введите их в параметр, тогда только он интерпретирует Unicode шрифты. Например, если я сделаю следующее, это нормально:
ui->textBrowser->setHtml("<b>akko- sati (ā + kruś), akkhāti (ā + khyā), abbahati (ā + bṛh)</b>");
Как я могу прочитать Unicode содержимое из HTML файлы и показать их в QTextBrowser?
Я буду очень благодарен, если кто-то покажет мне глючные части в моих кодах или предложит лучший способ решения моей проблемы.
Вы читаете двоичный файл в QString, но не сообщаете программе, какие байты соответствуют какому символу юникода, т.е. вы не указываете «кодировку», то есть. «Кодек».
Чтобы решить вашу проблему, спросите QTextStream
какие коды он использует по умолчанию:
QTextStream textStream1(&file);
qDebug() << textStream1.codec()->name();
В моей системе Linux это уже UTF-8, но в вашей системе он может быть другим. Чтобы заставить QTextStream интерпретировать ввод как UTF-8, используйте QTextStream :: setCodec.