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);
}