美文网首页Qt学习
QT中文乱码问题(字符串变量)

QT中文乱码问题(字符串变量)

作者: 梦远心沉 | 来源:发表于2017-10-24 12:37 被阅读53次

文章总结在最后面,想快速解决问题的可以直接拉到最后。

一、使用变量显示中文字符

到QT5以后,一般情况下要显示中文字符最简单的就是使用

QStringLiteral(“我是中文”)

但是QStringLiteral所用参数只能是字符串常量,不能为变量。

所以当使用类似QStringLiteral(str)的代码时候会报错:

error: expected primary-expression before 'enum'
         enum { Size = sizeof(QT_UNICODE_LITERAL(str))/2 - 1 }; \
         ^

因此想到使用

string str = "这是中文";
QString::fromLocal8Bit(str);

但会发现qDebug后输出的是

"杩欐槸涓\uE15F枃"

这时候使用QString::fromStdString(str)就能解决这个问题

string str = "这是中文";
QString::fromStdString(str)

输出结果:

"这是中文"

以上是针对于字符串变量是string类型的情况,若是QString则先将其转成string,参考代码如下:

QString data = query.value(i).toString();//获得数据库中第i个字段的值
QByteArray cdata = data.toLocal8Bit();
string str = string(cdata).data();//这两行换成string str = data.toStdString();依然会乱码
qDebug()<<QString::fromStdString(str);//输出转换成中文字符的结果

二、出现部分中文乱码

如果上面的方法还不行,就用以下方法:
该方法同时可以解决部分乱码问题,比如末尾句号变成‘??’,‘(’后的汉字变成‘??’:

这里获取mysql第二个字段testcol的值:


这时候mysql中的数据是没问题的:


但qDebug的结果这三个地方都出现了部分乱码:


解决方法:

直接在main函数里加上:

#include <QTextCodec>
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

QT5可以用,有这个函数的。

就像这样:

Paste_Image.png

超简洁的总结

  • 一、QT5使用变量显示中文字符(不能用QStringLiteral):
string str = "这是中文";
QString::fromStdString(str)
  • 二、部分中文乱码(如“??”),在主函数添加:
#include <QTextCodec>
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

相关文章

  • QT中文乱码问题(字符串变量)

    文章总结在最后面,想快速解决问题的可以直接拉到最后。 一、使用变量显示中文字符 到QT5以后,一般情况下要显示中文...

  • qt中文注释乱码显示不全

    问题展示:qt 源代码中,中文注释显示乱码如何解决? qt中文注释乱码_显示不全.png 解决办法(参考): Wi...

  • QT5笔记

    QT5.0乱码问题 不能用QTextCodec解决乱码问题,需要用QStringLiteral("我是中文") Q...

  • Qt中文乱码问题

    接触了Qt,由于习惯中VS,如果使用VS写QT代码,刚接触很快就发现有中文乱码问题,我的解决方法如下: 新建一个头...

  • Qt中文乱码问题

    Qt在显示中文时会出现乱码或者编译不过的情况 主要由以下问题造成 ,在Qt+VS的搭建的环境下,如果源码文件保存为...

  • QT4笔记

    QT中文乱码 QTextCodec::setCodecForCStrings(QTextCodec::codecF...

  • 【QT】QT中文乱码

    以下是dbzhang关于qt中文乱码问题原因的阐述,觉得不错: 首先呢,声明一下,QString 是不存在中文支持...

  • 解决Spring MVC ResponseBody返回中文字符串

    解决Spring MVC ResponseBody返回中文字符串乱码问题 引起乱码原因为spring mvc使用的...

  • QT中将gbk字符转换为utf-8字符

    对于中文显示,由于QT默认采用UTF-8编码显示,若在控件中使用GBK类型的中文,则会显示乱码。 给Qt控件设置内...

  • Day_04_Servlet

    request获得中文参数乱码问题 response返回中文乱码问题 跳转

网友评论

    本文标题:QT中文乱码问题(字符串变量)

    本文链接:https://www.haomeiwen.com/subject/dtmtpxtx.html