最近写HTTP服务器,解析请求中的url,发现有一些特殊字符:
“+” URL 中+号表示空格 %2B
“空格” URL中的空格可以用+号或者编码 %20
“/” 分隔目录和子目录 %2F
“?” 分隔实际的 URL 和参数 %3F
“%” 指定特殊字符 %25
“#” 表示书签 %23
“&” URL 中指定的参数间的分隔符 %26
“=” URL 中指定参数的值 %3D
“\” 表示目录路径 %5C
“.” 句号 %2E
“:” 冒号 %3A
这里用%号表示转义符,后面跟着16进制数。
在编写HTTP服务器的时候,离不开url的解析,当遇到%号的时候将后面的16进制数转为10进制(0-255对应ascii码)后再转为char型。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
std::string s("3D");
stringstream ss(s);
int value;
ss>>std::hex>>value;
string out;
out+=static_cast<char>(value);
cout<<out<<endl;//输出“=”符号
return 0;
}