Почему шрифты Unicode не отображаются должным образом в QTextBrowser, когда содержимое Unicode читается из HTML-файла?

Я читаю 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?

Я буду очень благодарен, если кто-то покажет мне глючные части в моих кодах или предложит лучший способ решения моей проблемы.

1

Решение

Вы читаете двоичный файл в QString, но не сообщаете программе, какие байты соответствуют какому символу юникода, т.е. вы не указываете «кодировку», то есть. «Кодек».

Чтобы решить вашу проблему, спросите QTextStream какие коды он использует по умолчанию:

QTextStream textStream1(&file);
qDebug() << textStream1.codec()->name();

В моей системе Linux это уже UTF-8, но в вашей системе он может быть другим. Чтобы заставить QTextStream интерпретировать ввод как UTF-8, используйте QTextStream :: setCodec.

1

Другие решения


По вопросам рекламы [email protected]