1. 程式人生 > 實用技巧 >qt中的toUtf8, toLatin1, Local8bit, toUcs4(轉)

qt中的toUtf8, toLatin1, Local8bit, toUcs4(轉)

轉自:https://blog.csdn.net/u010607621/article/details/50321915

1 首先說下字符集。

gb18030字符集相容了gbk字符集,以兩個位元組表示一個文字。windows系統可能使用的就是這兩種的一種。

unicode字符集以2個或以上的位元組表示一個漢字。

通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或稱ISO/IEC 10646)標準所定義的標準字符集。UCS-2用兩個位元組編碼,UCS-4用4個位元組編碼。

utf8字符集以2個或以上的位元組表示一個漢字。實際上具體的數值和unicode有很大的相關性。

ISO-8859-1編碼是單位元組編碼,向下相容ASCII,其編碼範圍是0x00-0xFF。亦稱為Latin1。

2 QString內部可能是使用unicode字符集來儲存文字。具體輸出的時候,就可以輸出該文字對應的unicode, ucs4, utf8, gb18030的編碼。

3 程式碼示例
使用qtcreator建立main.cpp,它預設程式碼裡的漢字使用utf8字符集。不要使用msvc編譯器,因為它預設漢字使用gb18030字符集

#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString tmp
="漢字"; qDebug() << "tmp=" << tmp << endl; qDebug() << "toUtf8" << tmp.toUtf8() << endl; //返回utf8編碼的一串數字 qDebug() << "toLatin1" << tmp.toLatin1() << endl; //"漢字"不在latin1字符集中,所以結果無意義(為??) char *p = new char[1+strlen(tmp.toLatin1().data())]; strcpy(p, tmp.toLatin1().data());
for (int i=0; p[i] != '\0'; i++) { printf("0x%02x ", p[i]); } printf("\n"); delete p; qDebug() << "toLocal8bit" << tmp.toLocal8Bit() << endl;//返回windows作業系統設定的字符集gb18030的編碼.解決中文亂碼的一種方式:myBtn->setTesxt(QString::fromLocal8Bit("中文");
    qDebug() << "toUcs4" << tmp.toUcs4() << endl; //返回ucs4編碼組成的QVector,一個漢字佔用4位元組 return a.exec(); }