首先須要用到QString的靜態成員函數來獲取字符數組:數組
QByteArray QString::toLocal8Bit () ; //獲取字節數組對象 char * QByteArray::data (); //經過字節數組對象的成員data函數,獲取char數組
QTextCodec編碼類介紹函數
互轉主要用到這個類,經過該類能夠獲取編碼對象,其中常見支持:大數據
好比獲取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