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

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

posted @ 2020-07-01 17:11  品山  阅读(1503)  评论(0编辑  收藏  举报