//变化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编解码器的更多相关文章

  1. 使用自定义 URL 实现控制器之间的跳转-b

    一个app往往有很多界面,而界面之间的跳转也就是对应控制器的跳转,控制器的跳转一般有两种情况 push 或者 modal,push 和 modal 的默认效果是系统提供的 文章配图 1. 概述 系统提 ...

  2. 谷歌 analytics.js 部分解密版

    源:http://www.google-analytics.com/analytics.js (function(){var aa=encodeURIComponent,f=window,ba=set ...

  3. ios app唤起页面跳转

    有些时候我们需要再其他地方把app唤起,并打开跳转到指定的vc上面.这里我自己写了一个vc的mgr,最主要的技术是method swizzle.原理就不详述,看代码吧. // // ViewContr ...

  4. 【数据标识】iOS App下载渠道的统计需求

    需求概述 我们现在有一个需求,某一个活动需要拉新所谓的拉新一般是推App下载,这个用户通过这个活动下载了App后,我们需要做到[在数据库中记录这个用户下载这个App是通过那个二维码渠道的,从效果上说, ...

  5. 中英文url解码vc++源程序

    本文主要讨论中文url解码实现问题,没有具体解说url编码,utf-8编码.想对编解码问题有更加具体的了解,请查阅相关文档 url编码:实质字符ascii码的十六进制.仅仅是略微有些变动,须要在前面加 ...

  6. zabbix自动发现功能实现批量web url监控

    需求: 现在有大量url需要监控,形式如http://www.baidu.com ,要求url状态不为200即报警. 需求详细分析: 大量的url,且url经常变化,现在监控用的是zabbix,如果手 ...

  7. ADF_Data Binding系列2_使用URL Service Data Control

    2015-02-16 Created By BaoXinjian

  8. vc++编程之在程序中加入网址链接

    在vc++对话框编程中,我们处于某种需要(介绍自己的软件或者自己的博客)可以在对话框上增加一个网址链接,用户只要一点击,就进入了相应的网页,我在此演示下如何完成. 1 打开编译器,我们新建一个基于对话 ...

  9. vc如何编译链接opengl库

    强烈推荐的一篇强大的OpenGl学习博文OpenGL入门学习 vc2012如何链接opengl库? 首先,我们需要下载opengl的库文件,http://pan.baidu.com/s/1kTsjkZ ...

随机推荐

  1. RSA, ACS5.X 集成配置

    目的是RSA和ACS集成,ACS作为RADIUS服务器提供二次验证服务. ①配置RSA SecurID Token Servers   按照如下网址配置: http://www.cisco.com/c ...

  2. Linux系统目录(转载)

    /         (这就是著名的根)├── bin         (你在终端运行的大多数程序,比如cp.mv...)├── boot         (内核放在这里,这个目录也经常被作为某个独立分 ...

  3. 【图文】雪佛兰Suburban 美国特工标准座驾_新闻中心_易车网

    [图文]雪佛兰Suburban 美国特工标准座驾_新闻中心_易车网 雪佛兰Suburban 美国特工标准座驾

  4. Pahom on Water(最大流)

    Pahom on Water Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  5. git 使用过程(四、回退版本)

    1.查看修改历史 命令:git log  如果嫌内容太多 可以加参数  --pretty=oneline (图一) 2.回退 命令:git reset --hard HEAD^    HEAD:代表本 ...

  6. H-JATG:NAND_FLASH的参数设置

    JATG:NAND_FLASH     不同的cpu同一款flash:         相同的cpu不同的flash:     相同的cpu不同厂家的的flash:

  7. VS 2013上Python的配置

    最近有点不务正业,去看了下Python (主要是学校OJ有这个语言,然后可以轻松解决大数据问题,不要说我太坑~~~) 目前感觉python和matlab有些类似,缺少了变量类型声明,总感觉自己写出来的 ...

  8. Easyui datagrid 批量编辑和提交

    <script type="text/javascript"> $(function() { var $dg = $("#dg"); $dg.dat ...

  9. pojg487-3279电话号码转换(字符映射)

    http://poj.grids.cn/practice/2974 注意输入中连字符可以任意添加和删除. 描述企业喜欢用容易被记住的电话号码.让电话号码容易被记住的一个办法是将它写成一个容易记住的单词 ...

  10. mojo 接口返回键值对的json格式

    my $c = shift; use DBI; my %hash=(); my $dbUser='zabbix'; my $user="root"; my $passwd=&quo ...