//变化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. C++的发展,特点和源程序构成

    最近一段时间在学习C++,也借了几本相关的书籍.因为之前主要用C#写程序,大概写了也有两年了吧.所以在回过头来学习C++,还是挺快的.但是我觉得光看书是不行的,要写!!因此我想把我整个学习C++的过程 ...

  2. JAVA语言的素数判断,随机数,函数调用

    近来刚学JAVA,就从JAVA写起吧,JAVA判别素数,其实方法和C/C++没什么区别,主要就是想谈一下,其中包括的3个点. (1)JAVA语言产生随机数,random函数,定义参数max的作用是给出 ...

  3. unix IO笔记

    一.IO与文件映射 1.IO的共享与效率 read与write其中数据缓冲的大小 读取数据的缓冲:getpagesize 2.定位与定位读取(随机读取) read与write在操作的时候,自动移动读取 ...

  4. VM VirtualBox安装Centos6.5

    · · 参考资料:http://www.jb51.net/os/239738.html 如果安装图形界面,内存分配要大于628M 和下图安装选项无关,1.2都可以 界面说明: Install or u ...

  5. Application和Session的例子

    %@ Page Language="C#" AutoEventWireup="true" CodeBehind="ApplicationTest.as ...

  6. pythonxy 安装

    安装Numpy,发现错误: No module named msvccompiler in numpy.distutils; trying from distutils 目前python除了在 Win ...

  7. rollback的作用

    #pragma mark - 以队列的形式添加 // 以队列的形式添加数据FMDB比较常用的添加方式 // FMDB不支持多个线程同时操作,所以一般以串行的方式实现相关操作 - (IBAction)i ...

  8. Binary Tree(二叉树+思维)

    Binary Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tota ...

  9. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  10. 64位CentOS上编译 Hadoop 2.2.0

    下载了Hadoop预编译好的二进制包,hadoop-2.2.0.tar.gz,启动起来后.总是出现这样的警告: WARN util.NativeCodeLoader: Unable to load n ...