1

私はhtmlファイルを読んでいます。このファイルには、基本的に次のようなUnicodeテキストが含まれています。

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

しかし、QTextBrowserUnicodeフォントを解釈していません。したがって、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に表示するにはどうすればよいですか?

誰かが私のコードのバグのある部分を見せてくれたり、問題を解決するためのより良い方法を教えてくれたりしたら、とても感謝します。

4

1 に答える 1

1

バイナリ ファイルを QString に読み込みますが、どのバイトがどの Unicode 文字に対応するかをプログラムに伝えません。つまり、「エンコーディング」別名を指定しません。「コーデック」。

問題をデバッグするQTextStreamには、デフォルトで使用するコードを尋ねます。

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

私の Linux システムでは、これはすでに「UTF-8」ですが、システムでは異なる場合があります。入力を UTF-8 として解釈する QTextStream を強制するには、QTextStream::setCodecを使用します。

于 2015-02-13T09:29:38.120 に答える