场景:
1.有时候获取一个超链接时,或者一个图片src时,里面的地址带有%XX,这样如果当成文件路径处理会不识别。所以要把转义字符解码。
2.它其实就是ASCII码的十六进制表示。
以下是stackoverflow提供的一个实现,很久以前找的,找不到原文了。添加了一些单元测试.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <windows.h>
#include <assert.h>
std::string UrlDecode(std::string &SRC)
{
std::string ret;
char ch;
int ii;
for (size_t i=0; i<SRC.length(); i++) {
if (int(SRC[i])==37) {
sscanf(SRC.substr(i+1,2).c_str(), "%x", &ii);
ch=static_cast<char>(ii);
ret+=ch;
i=i+2;
} else {
ret+=SRC[i];
}
}
return (ret);
}
int main(int argc, char *argv[])
{
printf("Hello, world\n");
std::string file_path = "C:\\Program%20File\\";
std::string str = UrlDecode(file_path);
assert(!strcmp(str.c_str(),"C:\\Program File\\"));
return 0;
}