一生一世学坛

 找回密码
 立即注册
搜索
查看: 4155|回复: 0
打印 上一主题 下一主题

vc中进行urlencode和urldecode

[复制链接]

334

主题

385

帖子

6830

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6830
跳转到指定楼层
楼主
发表于 2021-5-27 15:48:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
vc++中进行urlencode和urldecode
  1. #define IsHexNum(c) ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'))

  2. //urf8编码字符串处理
  3. CString Utf8ToStringT(LPSTR str)
  4. {
  5.     _ASSERT(str);
  6.     USES_CONVERSION;
  7.     WCHAR *buf;
  8.     int length = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
  9.     buf = new WCHAR[length+1];
  10.     ZeroMemory(buf, (length+1) * sizeof(WCHAR));
  11.     MultiByteToWideChar(CP_UTF8, 0, str, -1, buf, length);

  12.     return (CString(W2T(buf)));
  13. }

  14. //url编码字符串解码函数
  15. CString UrlDecode(LPCTSTR url)
  16. {
  17.     _ASSERT(url);
  18.     USES_CONVERSION;
  19.     LPSTR _url = T2A(const_cast<LPTSTR>(url));
  20.     int i = 0;
  21.     int length = (int)strlen(_url);
  22.     CHAR *buf = new CHAR[length];
  23.     ZeroMemory(buf, length);
  24.     LPSTR p = buf;
  25. char tmp[4];
  26.     while(i < length)
  27.     {
  28.         if(i <= length -3 && _url[i] == '%' && IsHexNum(_url[i+1]) && IsHexNum(_url[i+2]))
  29.         {
  30.    memset(tmp, 0, sizeof(tmp));
  31.    memcpy(tmp, _url + i + 1,2);
  32.             sscanf(tmp, "%x", p++);
  33.             i += 3;
  34.         }
  35.         else
  36.         {
  37.             *(p++) = _url[i++];
  38.         }
  39.     }
  40.     //return CString(buf);
  41. return Utf8ToStringT(buf);
  42. }

  43. //进行Url编码 UTF - 8
  44. CString UrlEncode(CString strUnicode)
  45. {
  46.     LPCWSTR unicode = T2CW(strUnicode);
  47.     int len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, 0, 0, 0, 0);
  48.     if (!len)
  49.         return strUnicode;
  50.     char *utf8 = new char[len + 1];
  51.     char *utf8temp = utf8;
  52.     WideCharToMultiByte(CP_UTF8, 0, unicode, -1, utf8, len + 1, 0, 0);
  53.     utf8[len] = NULL;
  54.     CString strTemp, strEncodeData;
  55.     while (*utf8!= '\0')
  56.     {
  57.         strTemp.Format(_T("%%%2x"), (BYTE)*utf8);
  58.         strEncodeData += strTemp;
  59.         ++utf8;
  60.     }

  61.     delete[]utf8temp;

  62.     return CString(strEncodeData);

  63. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|分享学习  

GMT+8, 2024-5-17 13:43 , Processed in 0.051427 second(s), 6 queries , File On.

声明:本站严禁任何人以任何形式发表违法言论!

本站内容由网友原创或转载,如果侵犯了您的合法权益,请及时联系处理!© 2017 zamxqun@163.com

皖公网安备 34010402700634号

皖ICP备17017002号-1

快速回复 返回顶部 返回列表