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

时间:2024-03-29 12:35:22

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

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

3、解决办法:

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

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

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类来进行编码转换。