QT4.6中文GB2312與utf-8和unicode及URL encoding %編碼匯總
大家好,
剛開始接觸QT,還不太懂希望大家多交流。
由于想寫一個簡單的程序涉及到編碼轉換的問題,故將學到的點滴分享一下。
說明:
windows中ie地址欄寫“我們”發送到服務器端會變為“%CE%D2%C3%C7”,是GB2312轉換成URL 百分號編碼的形式
ubuntu中firefox地址欄寫“我們”發送到服務器變成"%E6%88%91%E4%BB%AC",是UTF-8轉換成URL 百分號編碼的形式
下面分享匯總后的轉換代碼:(我的環境:ubuntu9.10 QT4.6)
//Ubuntu firefox http get "我們" %E6%88%91%E4%BB%AC UTF-8
//Windows ie http get "我們" %CE%D2%C3%C7 GB2312
char* s="0x我們"; //UTF-8 char*
QString strT1="0x%CE%D2%C3%C7"; //GB2312的URL百分號編碼
QByteArray baT1,baT2,baT3,baT4;
PercentEncoding2ByteArray(strT1, baT1); //自己寫的函數,由于QUrl::fromPercentEncoding僅適用UTF-8的URL編碼
strT1=QTextCodec::codecForName("GB2312")->toUnicode(baT1); //GB2312's QByteArray Convert to QString Unicode
baT2=QTextCodec::codecForName("GB2312")->fromUnicode(strT1);
//QString Unicode convert to GB2312 QByteArray
QString strT2,strT3,strT4,strT5;
strT2=QTextCodec::codecForName("UTF-8")->toUnicode("0x我們"); //UTF-8 Char* to Unicode QString
baT3=QTextCodec::codecForName("UTF-8")->fromUnicode(strT2); //Unicode QString to UTF-8 QByteArray
strT3=QTextCodec::codecForName("UTF-8")->toUnicode(s); //UTF-8 Char* to Unicode QString
strT4=QUrl::toPercentEncoding(QString::fromLocal8Bit(s)); //UTF-8 Char* to PercentEncoding (UTF-8 format)
strT5=QUrl::fromPercentEncoding("0x%E6%88%91%E4%BB%AC"); //PercentEncoding (UTF-8 format) to Unicode
baT4=QTextCodec::codecForName("GB2312")->fromUnicode(QTextCodec::codecForName("UTF-8")->toUnicode(s));
//UTF-8 Char* to GB2312 QByteArray
另附一個小函數:(用于GB2312的URL百分號編碼轉換)
void PercentEncoding2ByteArray(QString strInput, QByteArray & ByteArrayOut)
{
for(int i=0; i<strInput.length();)
{
if (0==QString::compare(strInput.mid(i,1), QString("%")))
{
if ((i+2)<strInput.length())
{
ByteArrayOut.append(strInput.mid(i+1,2).toShort(0,16));
i=i+3;
}
else
{
ByteArrayOut.append(strInput.mid(i,1));
i++;
}
}
else
{
ByteArrayOut.append(strInput.mid(i,1));
i++;
}
}//For end
}// PercentEncoding2ByteArray end