33.QT-UTF8,GBK互轉

首先須要用到QString的靜態成員函數來獲取字符數組:數組

QByteArray QString::toLocal8Bit () ;
                        //獲取字節數組對象
char * QByteArray::data ();        //經過字節數組對象的成員data函數,獲取char數組

 

QTextCodec編碼類介紹函數

互轉主要用到這個類,經過該類能夠獲取編碼對象,其中常見支持:大數據

  • UTF-8
  • UTF-16         //默認大端
  • UTF-16BE   //大端,大數據開頭, 好比字符a=00 61
  • UTF-16LE    //小端,小數據開頭, 好比字符a=61 00
  • UTF-32
  • UTF-32BE             
  • UTF-32LE      
  • GB2312
  • GBK等

好比獲取utf-8編碼對象:編碼

QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); //獲取UTF-8編碼對象

 

示例-utf8轉爲GBKspa

    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));    //設置本地編碼對象
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));  //設置QString編碼對象

     //utf8向gdk轉換的過程是utf8->unicode, unicode->gdk
     //在PC,Unicode通常表明utf-16,而utf-8是單獨列出來的
     //啊的gbk編碼: 0xB0A1            啊的utf8編碼:0xE5958A
     //哈的gbk編碼: 0xB9FE            哈的utf8編碼:0xE59388

    char encode[6]={0xe5,0x95,0x8A,0xE5,0x93,0x88};             //啊哈 utf-8編碼
    QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");       //獲取UTF-8編碼對象
    QString  unicode = utf8->toUnicode(encode,6);               //經過UTF-8編碼對象將啊哈轉爲utf-16

    QTextCodec *gbk = QTextCodec::codecForName("GBK");          //獲取GBK編碼對象
    QByteArray arr=gbk->fromUnicode(unicode);                   //從Unicode編碼轉爲自身編碼類型(GBK)
    qDebug()<<QString::fromLocal8Bit(arr);                     //打印GBK碼

    qDebug()<<arr.size();
    for(int i=0; i <arr.size();i++)
    {
        qDebug("%x",(unsigned char)arr[i]);
    }

打印:code

 

 

示例-GBK轉爲UTF8對象

 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));    //設置本地編碼對象
 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));  //設置QString編碼對象


     //啊的gbk編碼: 0xB0A1            啊的utf8編碼:0xE5958A
     //哈的gbk編碼: 0xB9FE            哈的utf8編碼:0xE59388
QString str="啊哈"; //對應編碼爲: 0xB0A1 0xB9FE QTextCodec *gbk = QTextCodec::codecForName("gbk"); QString unicode=gbk->toUnicode(str.toLocal8Bit()); //經過gbk編碼對象將啊哈轉爲utf-16 QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); QByteArray arr=utf8->fromUnicode(unicode); //從Unicode編碼轉爲自身編碼類型(utf-8) qDebug()<<arr.size(); for(int i=0; i <arr.size();i++) { qDebug("%x",(unsigned char)arr[i]); }

 打印:blog

相關文章
相關標籤/搜索