Почему шрифты 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?

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


person Bhaddiya Tanchangya    schedule 13.02.2015    source источник


Ответы (1)


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

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

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

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

person Simon Warta    schedule 13.02.2015
comment
Большое спасибо. Теперь моя проблема решена. Я только что добавил textStream1.setCodec("UTF-8"); после QTextStream textStream1(&file);. Большое спасибо еще раз. - person Bhaddiya Tanchangya; 13.02.2015
comment
Какой кодек был по умолчанию в вашем случае? Вы на винде? - person Simon Warta; 13.02.2015
comment
Я не проверял. Но нет необходимости. Моя проблема решена :D. Я на Windows. - person Bhaddiya Tanchangya; 13.02.2015
comment
Речь идет о понимании проблемы, а не о ее быстром решении ;) В любом случае, я рад, что теперь это работает! - person Simon Warta; 13.02.2015