首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PlainTextEdit中显示UTF-8字符

在PlainTextEdit中显示UTF-8字符
EN

Stack Overflow用户
提问于 2011-04-02 12:14:26
回答 1查看 2.7K关注 0票数 1

我试图在PlainTextEdit控件中显示以UTF8编码的中文字符,但它不能正确地呈现它们。

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

代码语言:javascript
复制
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

对如何处理有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-02 17:08:07

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

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

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

代码语言:javascript
复制
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()中。尝试使用:

代码语言:javascript
复制
 QString chineseChar = QString::fromUtf8( query.value(fieldNo).toByteArray() ); 

如果这还不能解决问题,那么问题出在QtSQL中的某个地方,它对从数据库接收的数据采用了错误的编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5521104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档