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

Posted

技术标签:

【中文标题】当从 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 内容时,为什么 Unicode 字体无法在 QTextBrowser 中正确显示? 【发布时间】:2015-02-13 09:03:02 【问题描述】:

我正在阅读一个 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 中?

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

【问题讨论】:

【参考方案1】:

您将二进制文件读入 QString 但不告诉程序哪些字节对应于哪个 unicode 字符,即您没有指定“编码”。 “编解码器”。

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

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

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

【讨论】:

非常感谢。现在我的问题解决了。我刚刚在QTextStream textStream1(&amp;file); 之后添加了textStream1.setCodec("UTF-8");。再次感谢您。 你的默认编解码器是什么?你在 Windows 上吗? 我没有检查它。但没必要。我的问题解决了:D。我在 Windows 上。 这是关于理解问题,而不是快速解决问题;)无论如何,我很高兴它现在可以工作了!

以上是关于当从 html 文件中读取 Unicode 内容时,为啥 Unicode 字体无法在 QTextBrowser 中正确显示?的主要内容,如果未能解决你的问题,请参考以下文章

如何在C#中unescape unicode字符串

Python读取内容UnicodeDecodeError错误

Python编码

在 Web 应用程序中读取私有 dkim 文件内容的用户权限

java 中 FileReader能读取啥格式的文件

从 torrent 中读取 Unicode 元数据