博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC实现URL编解码器
阅读量:5249 次
发布时间:2019-06-14

本文共 1784 字,大约阅读时间需要 5 分钟。

//变化UTF8为了中国void UTF8ToGB(CString& szstr){	WCHAR* strSrc;	TCHAR* szRes;	int i = MultiByteToWideChar(CP_UTF8, 0, szstr, -1, NULL, 0);	strSrc = new WCHAR[i + 1];	MultiByteToWideChar(CP_UTF8, 0, szstr, -1, strSrc, i);	i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);	szRes = new TCHAR[i + 1];	WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);	szstr = szRes;	delete[]strSrc;	delete[]szRes;}//解析URL//输入:"/apps/%E6%BB%B4%E6%BB%B4%E6%89%93%E8%BD%A6.apk"//输出: "/apps/嘀嘀打车.apk"//方法: 分下面两步实现//先调用DecodeUrl(),得到"/apps/婊存淮鎵撹溅.apk"//再调用UTF8ToGB(),得到"/apps/嘀嘀打车.apk"BOOL DecodeUrl(char *pURL, char  *szBuff, int  nBuffLen){	if (NULL == szBuff || NULL == pURL)	{		return FALSE;	}	if (nBuffLen == 0)	{		return FALSE;	}	char  *p = pURL;  // 用来循环  	int    i = 0;    // i用来控制szBuff数组  	/* 	暂时保存szBuff编码的数据	比如: %1A%2B%3C	*/	char  t = '\0';	while (*p != '\0' && nBuffLen--)	{		if (*p == 0x25) // 0x25 = '%'  		{			//下面是十六进制数中常出现的大写字母,小写字母,数字的推断			if (p[1] >= 'A' && p[1] <= 'Z')	//大写字母  			{				t = p[1] - 'A' + 10;  //A = 10,下同  			}			else if (p[1] >= 'a' && p[1] <= 'z') //小写字母  			{				t = p[1] - 'a' + 10;			}			else if (p[1] >= '0' && p[1] <= '9') //数字  			{				t = p[1] - '0';			}			t *= 16;  // 将数放到十位上去  			if (p[2] >= 'A' && p[2] <= 'Z') //大写字母  			{				t += p[2] - 'A' + 10;			}			else if (p[2] >= 'a' && p[2] <= 'z') //小写字母  			{				t += p[2] - 'a' + 10;			}			else if (p[2] >= '0' && p[2] <= '9') //数字  			{				t += p[2] - '0';			}			//到此合成了一个十六进制数  			szBuff[i] = t;			p += 3, i++;		}		else		{			//没有被url编码的数据  			//'+'特殊处理.它相当于一个空格  			if (*p != '+')			{				szBuff[i] = *p;			}			else			{				szBuff[i] = 0x20;			}			i++;			p++;		}	}	szBuff[i] = '\0';  //终结者  	return TRUE;}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/hrhguanli/p/4747944.html

你可能感兴趣的文章
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
CentOS 简单命令
查看>>
使用&nbsp;SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>