我试图在PlainTextEdit控件中显示以UTF8编码的中文字符,但它不能正确地呈现它们。
我的数据来自数据库,并且我知道我在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对如何处理有什么建议吗?
发布于 2011-04-02 17:08:07
“我的数据来自数据库,我知道我在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字符串转换为字节数组,然后隐式地转换回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中的某个地方,它对从数据库接收的数据采用了错误的编码。
https://stackoverflow.com/questions/5521104
复制相似问题