GB2313的URL编码怎么转换为中文
GB2313的URL编码如何转换为中文%CE%D2%C3%C7 //中文为:我们GB2312的URL编码怎么用QT转换成中文呢编码[解决
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;
}