C++ 从html文件读取Unicode内容时,为什么Unicode字体不能在QTextBrowser中正确显示?

C++ 从html文件读取Unicode内容时,为什么Unicode字体不能在QTextBrowser中正确显示?,c++,qt,unicode,qtextbrowser,C++,Qt,Unicode,Qtextbrowser,我正在读一个html文件。该文件基本上包含以下Unicode文本: <b>akko- sati (ā + kruś), akkhāti (ā + khyā), abbahati (ā + bṛh)</b> akko- sati (Ä + kruÅ›), akkhÄti (Ä + khyÄ), abbahati (Ä + bá¹›h) QTextBrowser正确解释了html标记。但是Unicode字体有什么问题 以下是我读取和填充Unicode内容的代码: void

我正在读一个html文件。该文件基本上包含以下Unicode文本:

<b>akko- sati (ā + kruś), akkhāti (ā + khyā), abbahati (ā + bṛh)</b>
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); 
} 
void主窗口::populateTextBrowser(常量QModelIndex&index)
{
QFile文件(“Data\\”+index.Data().toString()+”.html”);
如果(!file.open(QFile::ReadOnly | QFile::Text)){
statusBar()->showMessage(“无法打开文件:+file.fileName());
}
QTextStream textStream1(&file);
QString字符串=”;
string+=textStream1.readAll();
用户界面->文本浏览器->设置HTML(字符串);
} 
但是,如果我不从html文件中读取Unicode内容,而是直接将其键入参数,那么只有它解释Unicode字体。例如,如果我执行以下操作,则可以:

ui->textBrowser->setHtml("<b>akko- sati (ā + kruś), akkhāti (ā + khyā), abbahati (ā + bṛh)</b>");
ui->textBrowser->setHtml(“akko-sati(ā+kruś)、akkhāti(ā+khyā)、abbahati(ā+bṛh) ”;
如何读取html文件中的Unicode内容并在QTextBrowser中显示


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

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

要调试问题,请询问默认情况下使用的代码:

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

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

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