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 ...
随机推荐
- 「C」 函数、运算、流程控制
一.函数 (一)什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”. (二)函数的定义 目的:将一个常用的功能封装起来,方 ...
- LNMP安装包sh脚本
Xshell 5 (Build 0719) Copyright (c) 2002-2015 NetSarang Computer, Inc. All rights reserved. Type `he ...
- django 基础入门(一)
1. django 基本命令 新建project django-admin.py startproject project-name 新建app python manage.py startapp a ...
- android中使用DisplayMetrics获取屏幕参数
--关于Density int android.graphics.Bitmap.getDensity(),返回bitmap-density(密度).默认的density就是当前display-dens ...
- 1369 - Answering Queries(规律)
1369 - Answering Queries PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 32 M ...
- HTML高级选项卡(1)————表标签
利用上述表格属性,能够简单的创建一个表格.并随意的分割行和列. <html> <head> <title>表格的应用</title> </head ...
- 制作Orcad的变种BOM(Variant BOM)
通常在Orcad中画的原理图并不仅仅是用于一款产品.比如一个控制器原理图,可能相应着很多款子产品线,而这些子产品线之间的差别就是通讯口组件不同,少焊几个芯片,或者仅仅是少焊几个电阻. 可是这样交付生产 ...
- Android 一个绚丽的loading动效分析与实现!
http://blog.csdn.net/tianjian4592/article/details/44538605 前两天我们这边的头儿给我说,有个 gif 动效很不错,可以考虑用来做项目里的loa ...
- java读取远程url图片,得到宽高
链接地址:http://blog.sina.com.cn/s/blog_407a68fc0100nrb6.html import java.io.IOException;import java.awt ...
- eclipse+tomcat+maven debug的时候总是出现source not found /Edit lookup path...的问题解决方案
eclipse+tomcat+maven debug的时候总是出现source not found /Edit lookup path...的问题解决方案 这个问题纠结好久好久.... 问题出现的环 ...