根本解决解决QT编程时中文乱码问题

8 篇文章 0 订阅
3 篇文章 0 订阅

1、出现乱码的原因:源程序的编码格式与显示的编码格式不一致。

2、有两种常用的中文编码格式,在win平台上,采用的是GBK格式。而在linux平台上,则采用的UFT-8格式。

3、解决办法:

A)首先查看代码的编码格式:默认情况下在装好QT之后,需要先设置代码的编码格式:选菜单栏的工具》》选项》》文本编辑器》》行为》》文件编码(File Encoding)设置。初始值为system,即跟随系统,参考上一段的内容。而本人为了保持win和linux平台的一致性。将win和linux平台下的QT 的此选项设置都成了UTF-8.

B)打开界面文件,查看界面文件的xml代码,观察第一行的编码格式,发现是UTF-8编码。即不管你是在哪一个平台使用QT,如果想在页面上显示中文就应该把要显示的字符串转成UTF-8编码,然后再传送给界面上的控件。

C)QT中字符串转码需要用到一个类QtextCodec。使用方法要先将此类包含进来:#include <QTextCodec>;然后定义一个此类的指针:QTextCodec *codec;并对此指针进行初始化。codec=QTextCodec::codecForName("UTF-8");初始化最好放到窗体的构造函数中;注意初始化时参数之所以UTF-8,是因为我们的文件编码格式为UTF-8.如果你的编码格式为GBK(win平台下并且没有进行A步骤的设置,编码系统还保留为system时)这里的参数要用GBK;

D)此类包含两个非常有用的成员函数:toUnicode()和fromUnicode().如果想将中文显示到界面上用codec->toUnicode("要显示的中文字符");例如:ui->btnOpenPort->setText(codec->toUnicode("打开连接"));建打开连接四个字显示到按钮btnOpenPort上。

E)C语言的标准函数用的字符串的编码方式为GBK,若果从QT中得到了字符串并且想用此串做c语言函数得参数时要用codec->fromUnicode("C语言的字符串参数");例如:

path = QFileDialog::getOpenFileName();//QT的一个打开文件的文本框,直接返回所选文件的完整文件名(包括路径和扩展名)

char * filename = codec->fromUnicode(path).data();//编码转换

FILE *fp = fopen(filename,"rb");//C语言打开文件操作,第一个参数为字符串,要求编码格式必须为GBK。

4、总结:

A在win平台上,采用的是GBK格式。而在linux平台上,则采用的UFT-8格式。

B)QT中显示或获得的字符串为UTF-8编码,而C语言中用到的时GBK编码。

C)根据需要使用QtextCodec类来进行编码转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值