读书人

GB2313的URL编码怎么转换为中文

发布时间: 2013-03-04 17:22:12 作者: rapoo

GB2313的URL编码如何转换为中文


%CE%D2%C3%C7 //中文为:我们
GB2312的URL编码 怎么用QT转换成中文呢

编码
[解决办法]
需要将gb2312转换为utf8(Qt的默认编码方式)
    QString gb2312str = "%CE%D2%C3%C7";

QTextCodec *codec = QTextCodec::codecForName("gb2312");
QString msg = codec->toUnicode(QByteArray::fromHex(gb2312str.toLocal8Bit()));
qDebug()<<msg;

以上代码在ubuntu下测试通过。
[解决办法]
std::string urlDecode(const std::string& _szToDecode)
{
std::string result;
int hex = 0;

for (size_t i = 0; i < _szToDecode.length(); ++i)
{
switch (_szToDecode[i])
{
case '+':
result += ' ';
break;
case '%':
if (isxdigit(_szToDecode[i + 1]) && isxdigit(_szToDecode[i + 2]))
{
std::string hexStr = _szToDecode.substr(i + 1, 2);
hex = strtol(hexStr.c_str(), 0, 16);

//字母和数字[0-9a-zA-Z]、一些特殊符号[$-_.+!*'(),] 、以及某些保留字[$&+,/:;=?@]
//可以不经过编码直接用于URL
if (!((hex >= 48 && hex <= 57)
[解决办法]
//0-9
(hex >=97 && hex <= 122)
[解决办法]
//a-z
(hex >=65 && hex <= 90) //A-Z

////一些特殊符号及保留字[$-_.+!*'(),] [$&+,/:;=?@]
//hex == 0x21
[解决办法]
hex == 0x24
[解决办法]
hex == 0x26
[解决办法]
hex == 0x27
[解决办法]
hex == 0x28
[解决办法]
hex == 0x29
//
[解决办法]
hex == 0x2a
[解决办法]
hex == 0x2b
[解决办法]
hex == 0x2c
[解决办法]
hex == 0x2d
[解决办法]
hex == 0x2e
[解决办法]
hex == 0x2f


//
[解决办法]
hex == 0x3A
[解决办法]
hex == 0x3B
[解决办法]
hex == 0x3D
[解决办法]
hex == 0x3f
[解决办法]
hex == 0x40
[解决办法]
hex == 0x5f
))
{
result += char(hex);
i += 2;
}
else
result += '%';
}
else
{
result += '%';
}
break;

default:
result += _szToDecode[i];
break;

}
}

return result;
}

读书人网 >QT开发

热点推荐