VC实现URL编解码器
//变化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;
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
VC实现URL编解码器的更多相关文章
- 使用自定义 URL 实现控制器之间的跳转-b
一个app往往有很多界面,而界面之间的跳转也就是对应控制器的跳转,控制器的跳转一般有两种情况 push 或者 modal,push 和 modal 的默认效果是系统提供的 文章配图 1. 概述 系统提 ...
- 谷歌 analytics.js 部分解密版
源:http://www.google-analytics.com/analytics.js (function(){var aa=encodeURIComponent,f=window,ba=set ...
- ios app唤起页面跳转
有些时候我们需要再其他地方把app唤起,并打开跳转到指定的vc上面.这里我自己写了一个vc的mgr,最主要的技术是method swizzle.原理就不详述,看代码吧. // // ViewContr ...
- 【数据标识】iOS App下载渠道的统计需求
需求概述 我们现在有一个需求,某一个活动需要拉新所谓的拉新一般是推App下载,这个用户通过这个活动下载了App后,我们需要做到[在数据库中记录这个用户下载这个App是通过那个二维码渠道的,从效果上说, ...
- 中英文url解码vc++源程序
本文主要讨论中文url解码实现问题,没有具体解说url编码,utf-8编码.想对编解码问题有更加具体的了解,请查阅相关文档 url编码:实质字符ascii码的十六进制.仅仅是略微有些变动,须要在前面加 ...
- zabbix自动发现功能实现批量web url监控
需求: 现在有大量url需要监控,形式如http://www.baidu.com ,要求url状态不为200即报警. 需求详细分析: 大量的url,且url经常变化,现在监控用的是zabbix,如果手 ...
- ADF_Data Binding系列2_使用URL Service Data Control
2015-02-16 Created By BaoXinjian
- vc++编程之在程序中加入网址链接
在vc++对话框编程中,我们处于某种需要(介绍自己的软件或者自己的博客)可以在对话框上增加一个网址链接,用户只要一点击,就进入了相应的网页,我在此演示下如何完成. 1 打开编译器,我们新建一个基于对话 ...
- vc如何编译链接opengl库
强烈推荐的一篇强大的OpenGl学习博文OpenGL入门学习 vc2012如何链接opengl库? 首先,我们需要下载opengl的库文件,http://pan.baidu.com/s/1kTsjkZ ...
随机推荐
- FFTW程序Demo
#include<stdio.h> #include<stdlib.h> #include <fftw3.h> #include<string.h> # ...
- 玩2k16
2k是我最喜欢的游戏啦,平时无聊了都会搞两盘.现在到2k16了,玩游戏时碰到一些麻烦,记录便查. 我哥一直说他的电脑玩2K16非常卡,根本玩不了,但是他的电脑配置可比我的高啊,我玩起溜溜地,喊他把配置 ...
- hdu 2814 快速求欧拉函数
/** 大意: 求[a,b] 之间 phi(a) + phi(a+1)...+ phi(b): 思路: 快速求欧拉函数 **/ #include <iostream> #include & ...
- GCC -Wall
官网:http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Warning-Options.html#Warning-Options3.8 Options to Re ...
- SSH有端口映射功能(访问本地端口=访问远程端口)
大部分SSH连接软件都有SSH通道转发功能,就是用这个实现的. 如果Delphi在代码上实现的话,用libSSH 或者 SecureBridge都可以. 代码基本不用帖,思路给大家讲一下吧. SSH有 ...
- Android studio dabao
首先肯定是配置gradle,百度一下就知道了,我的是mac下配置的,sudo vim ~/.bash_profile ,然后设置环境变量 GRADE_HOME=/Users/Admin/gradle; ...
- cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(三)-按键处理
在地图初始化好了之后,就开始移动马里奥吧,我在windows下,是使用键盘来移动马里奥的 w是跳,d是前进,a是后退,那么在程序里是怎么来获取这个按键的呢? 普通的windows程序,在按键之后,会有 ...
- VS2010/MFC对话框二:为对话框添加控件)
为对话框添加控件 创建对话框资源需要创建对话框模板.修改对话框属性.为对话框添加各种控件等步骤,前面一讲中已经讲了创建对话框模板和修改对话框属性,本节继续讲如何为对话框添加控件. 上一讲中创建了一个名 ...
- 循环之while
- 【甘道夫】使用HIVE SQL实现推荐系统数据补全
需求 在推荐系统场景中,假设基础行为数据太少,或者过于稀疏,通过推荐算法计算得出的推荐结果非常可能达不到要求的数量. 比方,希望针对每一个item或user推荐20个item,可是通过计算仅仅得到8个 ...