关于qt中文乱码问题,这里特地写一篇博客研究探讨

大家喜欢在windows下用qt写代码编译运行似乎没什么中文乱码,或者用qt creator写的代码编译无乱码,然后用vs集成的qt编译就出现乱码了,或者把代码移植到linux编译运行又出现乱码了。这个问题还是挺常见的,同时也令人头疼的问题。这里我就用文本编辑工具Notepad++以及linux的qt creator演示本次中文乱码问题。

首先打开qt creator编辑一下代码

#include<QApplication>  
#include<QPushButton>  
#include <QTextCodec>

int main(int argc,char *argv[])  
{  
    QApplication a(argc,argv);  
    QTextCodec *utf8 = QTextCodec::codecForName("utf8");//设置编码为utf8
    char utf81[20]= {0xE4,0xB8,0xAD,0xE5,0x9B,0xBD};//使用notepad编码为utf8编码,打上中国,然后转换为十六进制显示,然后复制到这里,utf8占6个字节

    QPushButton hellobtn(utf8->toUnicode(utf81),0);//因为qt显示是使用unicode显示,所以要把utf8编码转换为unicode编码即可
    hellobtn.resize(200,50);  //
    hellobtn.show();  
    return a.exec();  
} 

这里写图片描述

然后使用gbk编码与上面形成对比的代码如下:

#include<QApplication>  
#include<QPushButton>  
#include <QTextCodec>

int main(int argc,char *argv[])  
{  
    QApplication a(argc,argv);  
    QTextCodec *gbk= QTextCodec::codecForName("gbk");

    char gbk1[20] = {0xD6,0xD0,0xB9,0xFA};//中国字符用gbk编码,gbk占四个字节
    QPushButton hellobtn(gbk->toUnicode(gbk1),0);//因为qt显示是使用unicode显示,所以要把gbk编码转换为unicode编码即可
    hellobtn.resize(200,50);  //
    hellobtn.show();  
    return a.exec();  
} 

这里写图片描述

通过上面的两个代码我们来总结一下乱码问题:
1、首先要明确你字符本身是用什么编码,知道了字符的编码那么我们就用什么编码转换成另外 一个编码,比如上面的第一段程序,我字符本身编码是utf8,那么就设置utf8编码,然后再转成unicode编码。
2、还有文本本身是什么编码也是会影响字符串乱码的问题,不过我们知道了文本即代码是什么编码我们就用哪种编码即可。
3、就是qt界面用显示是unicode编码,不过目前最新版qt好像会自动转换成unicode编码。

补充如下

在这里插入图片描述

由上图的代码和打印可以知道qt编辑器下使用utf8编码导入QString后自动转换为unicode编码了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值