标签:程序 说明文 iso utf8 ola 代码 组合 原因 oca
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
其实上面说了那么多,主要还是要保证显示的编码格式与文本本身的编码格式一致。
标签:程序 说明文 iso utf8 ola 代码 组合 原因 oca
原文地址:https://www.cnblogs.com/softwareyy/p/13220253.html