当从 html 文件中读取 Unicode 内容时,为什么 Unicode 字体无法在 QTextBrowser 中正确显示?

Why Unicode fonts are not showing properly in the QTextBrowser when Unicode contents are read from an html file?

我正在阅读 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); 
} 

但是,如果我不从 html 文件中读取 Unicode 内容,而是直接将它们键入参数, 然后它只解释 Unicode 字体。例如,如果我这样做就可以了:

ui->textBrowser->setHtml("<b>akko- sati (ā + kruś), akkhāti (ā + khyā), abbahati (ā + bṛh)</b>");

如何从 html 文件中读取 Unicode 内容并在 QTextBrowser 中显示它们

如果有人向我展示代码中有问题的部分或告诉我解决问题的更好方法,我将不胜感激。

您将二进制文件读入 QString 但没有告诉程序哪些字节对应于哪个 unicode 字符,即您没有指定 "encoding" 又名。 "codec".

要调试您的问题,请询问QTextStream默认使用的代码:

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

在我的 Linux 系统上,它已经是 "UTF-8",但在您的系统上可能会有所不同。要强制 QTextStream 将输入解释为 UTF-8,请使用 QTextStream::setCodec.