Qtにおけるgb 2312/GBKのURL符号化関数

4612 ワード

エンコーディング関数:
QByteArray encodeURI(QString str)

{

    QByteArray array;

    QTextCodec *codec=QTextCodec::codecForName("GBK");

    QByteArray tmpArray;

    tmpArray = codec->fromUnicode(str);

    for(int i=0,size = tmpArray.length();i<size;i++){

        char ch = tmpArray.at(i);

        if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){

            array.append(ch);

        }else{

            uchar low = ch & 0xff;

            char c[3];

            sprintf(c,"%02X",low);

            array.append("%").append(c);

        }

    }

    return array;

}

 
デコード関数:
QString decodeURI(QString str)

{

    QByteArray array;

    for(int i=0; i<str.length();) {

        if (0==QString::compare(str.mid(i,1), QString("%"))) {

            if ((i+2)<str.length()) {

                array.append(str.mid(i+1,2).toShort(0,16));

                i=i+3;

            }

            else{

                array.append(str.mid(i,1));

                i++;

            }

        }

        else{

            array.append(str.mid(i,1));

            i++;

        }

    }

    QTextCodec *code=QTextCodec::codecForName("GBK");

    return code->toUnicode(array);

}