在PlainTextEdit中显示UTF-8字符

时间:2011-04-02 04:14:26

标签: qt utf-8

我正在尝试在PlainTextEdit控件中显示以UTF-8编码的中文字符,但它无法正确呈现它们。

我的数据来自数据库,我知道我在Qt中获得的字符串是正确的(字节与数据库中的字节相同)。一旦我在QString中有了中文字符,我尝试了各种各样的东西来显示它,但总是会产生问号或随机的ASCII字符:

QString chineseChar = query.value(fieldNo).toString(); // get the character

ui->plainTextEdit->appendPlainText(chineseChar); // doesn't work
ui->plainTextEdit->appendPlainText(chineseChar.toUtf8()); // doesn't work
ui->plainTextEdit->appendPlainText(QString::fromUtf8(chineseChar.toAscii()); // doesn't work

有关如何处理的任何建议吗?

1 个答案:

答案 0 :(得分:1)

“我的数据来自数据库,我知道我在Qt中获得的字符串是正确的(字节与数据库中的字节相同)。”

你是怎么检查的?试试chineseChar.toUtf8()。toHex()。

一旦您的字符串数据在QString中,接受QString的所有UI元素都将正确处理它。通常,从纯文本数据(const char * / QByteArray)转换为QString时会发生错误。 这里的转换:

ui->plainTextEdit->appendPlainText(chineseChar.toUtf8()); // doesn't work
ui->plainTextEdit->appendPlainText(QString::fromUtf8(chineseChar.toAscii()); // doesn't work

将unicode字符串转换为bytearray,然后隐含地返回QString,因为这些方法需要QString。 我建议您定义QT_NO_CAST_FROM_ASCII和QT_NO_CAST_TO_ASCII以避免任何不需要的QByteArray< - > QString转换。

如果字符串错误,则在从QByteArray / const char *转换为QString时,即在query.value(fieldNo).toString()中,错误通常发生在之前。试试:

 QString chineseChar = QString::fromUtf8( query.value(fieldNo).toByteArray() ); 

如果这没有帮助,问题出在QtSQL的某处,假设它从数据库接收的数据编码错误。