%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