31 lines
867 B
C++
31 lines
867 B
C++
|
#include <iostream>
|
|||
|
#include <sstream>
|
|||
|
#include <string>
|
|||
|
|
|||
|
namespace ztool {
|
|||
|
// 用于将URL编码的特殊字符转换为对应的ASCII字符
|
|||
|
std::string URLDecode(const std::string &encoded) {
|
|||
|
std::ostringstream decoded;
|
|||
|
std::string::const_iterator it = encoded.begin();
|
|||
|
while (it != encoded.end()) {
|
|||
|
char c = *it++;
|
|||
|
if (c == '%' && it != encoded.end()) {
|
|||
|
// 将%后面的两个字符解析为16进制数,并将其转换为字符
|
|||
|
int hexValue;
|
|||
|
std::istringstream hexStream(std::string(it, it + 2));
|
|||
|
if (hexStream >> std::hex >> hexValue) {
|
|||
|
decoded << static_cast<char>(hexValue);
|
|||
|
it += 2;
|
|||
|
} else {
|
|||
|
// 解码失败,保留原始字符
|
|||
|
decoded << c;
|
|||
|
}
|
|||
|
} else {
|
|||
|
// 非%字符,保留原始字符
|
|||
|
decoded << c;
|
|||
|
}
|
|||
|
}
|
|||
|
return decoded.str();
|
|||
|
}
|
|||
|
} // namespace ztool
|