赞
踩
关于Qt自带的Url解码接口QUrl::fromPercentEncoding无法识别空格字符,会将其转为+,还有%后无法组成url编码规则的也会转成乱码字符。
因此需要采用C++的Url编解码规则,自己封装接口。
char dec2hexChar(short n) { if (0 <= n && n <= 9) { return char(short('0') + n); } else if (10 <= n && n <= 15) { return char(short('A') + n - 10); } else { return char(0); } } short hexChar2dec(char c) { if ('0' <= c && c <= '9') { return short(c - '0'); } else if ('a' <= c && c <= 'f') { return (short(c - 'a') + 10); } else if ('A' <= c && c <= 'F') { return (short(c - 'A') + 10); } else { return -1; } }
Url编码接口
QString urlEncode(const QString &url) { QString result; string _url = url.toStdString(); for (unsigned int i = 0; i < _url.size(); i++) { char c = _url[i]; if ( ('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '/' || c == '.' ) { result += c; } else { int j = (short)c; if (j < 0) { j += 256; } int m, n; m = j / 16; n = j - m * 16; result += '%'; result += dec2hexChar(m); result += dec2hexChar(n); } } return result; }
Url解码接口
QString urlDecode(const QString &url) { QString result; string _url = url.toStdString(); for (unsigned int i = 0; i < _url.size(); i++) { char c = _url[i]; if ((c != '%') || (i >= _url.size()- 2)) { result += c; } else { char c1 = _url[i + 1]; char c0 = _url[i + 2]; if (-1 == hexChar2dec(c1) || -1 == hexChar2dec(c0)) { result += c; continue; } int num = 0; num += hexChar2dec(c1) * 16 + hexChar2dec(c0); result += char(num); i += 2; } } return result; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。