UrlEncode UrlDecode

 URL编码、解码

 

string URLDecode(string  &strSrc)
{
  string buffer = "";
  int len = strSrc.length();

  for (int i = 0; i < len; i++)
  {
      int j = i ;
      char ch = strSrc.at(j);
      if (ch == '%')
   {
  char tmpstr[] = "0x0__";
  int chnum;
  tmpstr[3] = strSrc.at(j+1);
  tmpstr[4] = strSrc.at(j+2);
  chnum = strtol(tmpstr, NULL, 16);  
  buffer += chnum;
  i += 2;
      }
   else if(ch == '+')
   {
    buffer += ' ';
   }
   else
   {
  buffer += ch;
      }
   }

   len=MultiByteToWideChar(CP_UTF8, 0, buffer.c_str (), -1, NULL,0);
    WCHAR * wszUtf8 = new WCHAR[len+1];
 if( wszUtf8 == NULL )
 {
  strSrc = "";
  return strSrc;
 }
    memset(wszUtf8, 0, len * 2 + 2);
 MultiByteToWideChar(CP_UTF8, 0, buffer.c_str (), -1, wszUtf8, len);

 len = WideCharToMultiByte(CP_ACP, 0,  wszUtf8, -1, NULL, 0, NULL, NULL);
 char *szUtf8=new char[len + 1];
 if( szUtf8 == NULL )
 {
  delete[] wszUtf8;
  strSrc = ""; 
  return strSrc;
 }
 memset(szUtf8, 0, len + 1);
 WideCharToMultiByte (CP_ACP, 0,  wszUtf8, -1,  LPSTR(szUtf8), len, NULL,NULL);

 strSrc = szUtf8;
 delete[] szUtf8;
 delete[] wszUtf8;

 return strSrc;
}


string URLEncode(string  &strSrc)
{
 int len=MultiByteToWideChar(CP_ACP, 0, strSrc.c_str (), -1, NULL,0);
    WCHAR * wszUtf8 = new WCHAR[len+1];
 if( wszUtf8 == NULL )
 {
  strSrc = "";
  return strSrc;
 }
    memset(wszUtf8, 0, len * 2 + 2);
 MultiByteToWideChar(CP_ACP, 0, strSrc.c_str (), -1, wszUtf8, len);

 len = WideCharToMultiByte(CP_UTF8, 0,  wszUtf8, -1, NULL, 0, NULL, NULL);
 char *szUtf8=new char[len + 1];
 if( wszUtf8 == NULL )
 {
  delete[] wszUtf8;
  strSrc = ""; 
  return strSrc;
 }
 memset(szUtf8, 0, len + 1);
 WideCharToMultiByte (CP_UTF8, 0,  wszUtf8, -1,  LPSTR(szUtf8), len, NULL,NULL);

 szUtf8[len]=0;
 string strResult = szUtf8;

 char num[4]; 

 //处理特殊字符,转化为%ASCII码的形式,‘ ’转为‘+’
 string::size_type index1 = 0 ;
 while ( (index1 =strResult.find_first_of( "/"< >%//^[]`+$,@:;/!#?=&", index1)) != string::npos )
 {           
  memset( num, 0, sizeof(num) );

  if( strResult[index1]==' ')
  {
   num[0] = '+';
   strResult.replace (index1, 1, num);
   index1+=1;
   continue;
  }
  sprintf_s( num, "%c%2x", '%', (strResult[index1]&255 ));
  strResult.replace (index1, 1, num);
  index1+=3;
 }
 
 strSrc =""; 
 for(unsigned i=0;i<strResult.length ();i++)
 {
  memset( num, 0, sizeof(num) );
  strResult[i]&=255;
  if( strResult[i] <= 32 || strResult[i]>= 123 )
  {
   strSrc+='%';
   sprintf_s( num, "%2x", strResult[i]&255 );
   strSrc+=num;
  }
  else
  {
   strSrc+=strResult[i];
  }
 }

 delete[] szUtf8;
 delete[] wszUtf8;

 return strSrc;

}

 

本文来自http://blog.csdn.net/hbu_dcf/archive/2009/01/04/3703372.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的`urlencode`和`urldecode`是用于处理URL编码和解码的方法。 `urlencode`方法用于将一个字典形式的参数列表转换为URL编码的字符串。例如,假设有一个字典`params`包含以下键值对: ``` params = {"name": "张三", "age": 20, "city": "北京"} ``` 使用`urlencode`方法将字典转换为URL编码的字符串: ``` import urllib.parse url_encoded = urllib.parse.urlencode(params) print(url_encoded) ``` 输出结果为: ``` name=%E5%BC%A0%E4%B8%89&age=20&city=%E5%8C%97%E4%BA%AC ``` `urldecode`方法用于将URL编码的字符串解码为字典形式的参数列表。例如,将上面的URL编码字符串解码为字典: ```python import urllib.parse url_decoded = urllib.parse.parse_qs(url_encoded) print(url_decoded) ``` 输出结果为: ``` {'name': ['张三'], 'age': ['20'], 'city': ['北京']} ``` 可以通过访问字典的键来获取对应的值: ```python name = url_decoded['name'][0] age = url_decoded['age'][0] city = url_decoded['city'][0] print(f"姓名:{name},年龄:{age},城市:{city}") ``` 输出结果: ``` 姓名:张三,年龄:20,城市:北京 ``` 通过这两个方法,我们可以方便地进行URL编码和解码的操作,以便于在HTTP请求或其他URL相关的场景中使用。 ### 回答2: Python中的urlencode方法是将字典数据编码为URL参数的字符串。它将字典键值对转换为一组key=value对,并用&符号链接起来。这通常用于构建GET请求的URL参数部分。 例如,将以下字典数据编码为URL参数字符串: ``` params = {'name': '张三', 'age': 20, 'city': '北京'} ``` 通过使用urlencode方法,我们可以得到如下结果: ``` encoded_params = urllib.parse.urlencode(params) print(encoded_params) ``` 输出结果为:name=%E5%BC%A0%E4%B8%89&age=20&city=%E5%8C%97%E4%BA%AC urldecode的功能与urlencode相反,它用于将URL参数字符串解码为字典数据。例如,将上面编码后的字符串解码为字典数据: ``` decoded_params = urllib.parse.parse_qs(encoded_params) print(decoded_params) ``` 输出结果为:{'name': ['张三'], 'age': ['20'], 'city': ['北京']} 注意,这里使用了urllib.parse模块来进行编码和解码。在Python 3中,urllib模块已经被拆分为多个子模块,其中urllib.parse包含了URL编码和解码相关的功能。 综上所述,Python中的urlencodeurldecode方法提供了方便的对URL参数进行编码和解码的功能,可以用于构建和解析GET请求的URL参数部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值