Qt界面显示乱码问题

Posted softwareyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt界面显示乱码问题相关的知识,希望对你有一定的参考价值。

Qt界面显示及内部函数都是用QString作为参数进行的。一般出现乱码原因都是QString没有按照正确的编码格式显示文本,导致出现乱码。QString内部采用Unicode编码,可以显示任何文本,但是QString在显示某个文本前必须知道此文本是什么编码,QString才能把此文本的编码格式转换成Unicode编码进行正确显示。就和发电报的摩斯电码一样,收报人员必须知道你是按那个密码本编的报文,他才能把报文转换成英文,再从英文翻译为中文显示(这里这样说不准确,摩斯密码可以直接翻译成中文)。

一般做国际版推荐统一UTF-8编码,包括源文件编码格式及内部字符串编码格式

下面是QString几个常用的转换函数及说明文本本身编码格式的函数,通过下面这些函数及其类似函数的组合,可以正确的显示所以文本

QString:: fromAscii():说明文本是Ascii编码

QString:: toAscii():QString无此成员

QString:: fromLatin1(): 说明文本编码格式为Latin-1(ISO-8859-1)

QString:: toLatin1():返回Latin-1编码的文本

QString:: fromUtf8():说明此文本是utf-8编码

QString:: toUtf8():返回utf-8编码的文本

QString:: fromLocal8Bit():说明此文本是操作系统默认字符编码,中文系统默认(gb18030)

QString:: toLocal8Bit():返回操作系统默认字符集编码的字符串

       可能有人觉得用上面哪些函数转来转去太麻烦了,那么可以使用下面的函数,设置CString的编码格式,或者说是告诉QString,程序中的文本默认都是这样编码的。

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

但是通过上面的编码函数到底要把编码格式设成GBK还是UTF-8还是其他的编码呢,一般来说就是源代码是GBK,就用GBK,源代码是UTF-8就用UTF-8。但有一个例外,如果你保存成了带BOM的UTF-8而且用的微软的cl编译器,此时仍是GBK

其实上面说了那么多,主要还是要保证显示的编码格式与文本本身的编码格式一致。

以上是关于Qt界面显示乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 界面中文乱码问题

QT命令行编译时中文显示乱码怎么解决,满意追加

qt4.6移植到qt4.7出现中文乱码

Qt中的tr函数和中文乱码问题

QT5常见问题二:程序显示中文乱码以及Linguist打开翻译文件乱码,该如何解决?

记录一个解决Arm Linux端U盘挂载时文件名显示乱码Qt显示乱码的问题