URL解码(GBK/UTF8) C++算法

我们浏览的网页都会被不同的编码方式编码

例如 :“C++”  URL编码(GBK)为 “C%2B%2B”

那么,如何实现解码呢?

通过观察可得url编码的编码规则

1、数字和字母不进行编码。

2、其他符号编码方式为对应ascii码的2位16进制前面加上一个“%”。

例如 “+” 查表可知 对应的16进制数为2B ,所以,“+” 编码成了“%2B”。

程序思路:

定义一个char数组存放需要解码的数据,然后用指针遍历,如果碰到%号则对其后面的两位进行转码,然后指针后移3位。如果碰到数字和字母则输出即可。然后指针后移一位。

  1. 程序代码:
 1 #include <iostream>
 2 //#include <stdio.h>
 3
 4 using namespace std;
 5
 6 int change(char *ch)
 7 {
 8     int n = atoi(ch);
 9     if(!n) //n == 0
10     {
11         return(*ch - ‘A‘ + 10);
12     }
13     else if( n >= 1 && n <= 9)
14     {
15         return n;
16     }
17 }
18
19 int main()
20 {
21     int change(char *);
22     char a[20] = {‘\0‘};
23     int z;
24     cin >> a;
25     char *p = a;
26     for( int i = 0; i < 20; i++, p++)
27     {
28         if( int(*p) == 37)
29         {
30             char c[3] = "";
31             char x[2] = {*(p+1)};
32             char y[2] = {*(p+2)};
33             int x1 = change(x);
34             int y1 = change(y);
35             z = 16*x1 + y1;
36             printf("%c",z);
37             p = p + 2;
38         }
39         else if( *p != ‘\0‘)
40         {
41             cout << *p;
42         }
43         if( *p == ‘\0‘)
44         {
45             break;
46         }
47
48     }
49     return 0;
50 }

用到的函数:

  1. int atoi( const char *nptr)atio函数是C语言库函数,参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。头文件: #include <stdlib.h>,但在c++中,似乎已经包含了这个库函数。

注意的点:

1、定义数组char a[20]一定要把数组初始化为空。 否则转码可能出现意想不到的结果。因为你所需要转码的内容可能不能把a的空间占满,那么没有占满的空间数据就是未知的。所以定义的时候最好初始化为空。

(1) char str[10]="";

(2) char str[10]={‘\0‘};

(3) char str[10]; str[0]=‘\0‘;

第(1)(2)种方式是将str数组的所有元素都初始化为‘\0‘,而第(3)种方式是只将str数组的第一个元素初始化为‘\0‘。如果数组的size非常大,那么前两种方式将会造成很大的开销。所以,除非必要(即我们需要将str数组的所有元素都初始化为0的情况),我们都应该选用第(3)种方式来初始化字符串数组。

2、为什么要使用change函数。我们知道,ascii码是可以直接进行加减运算得到对应的16进制数。例如:"2B" = (‘2‘ - ‘0‘) * 16 + (‘B‘ - ‘A‘ + 10)=43 如果是数字字符,直接减字符0,如果是大写字符,直接减字符A,小写同理。B的ascii是66,A的是65,‘B‘ - ‘A‘ = 1 ,则对应的应该是11。那么不使用change函数可以直接运算吗?这里又有一个问题。我们无法确定%号后面的第一位是数字还是字母,所以无法使用公式进行计算,必须先交给change函数判断。int n = atoi(ch); 如果是字母,则返回值为return(*ch - ‘A‘ + 10);(这里只考虑大写的情况),如果是数字,则返回值为return n;

3、最后,判断*p的值是否指向’\0’,如果是 ,则结束循环。

时间: 2024-10-09 22:53:51

URL解码(GBK/UTF8) C++算法的相关文章

GBK,UTF-8,和ISO8859-1之间的编码与解码

Unicode.UTF-8 和 ISO8859-1到底有什么区别 将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687".注意,这两个字没有iso8859-1编码,但可以用iso8859-1编码来"表示". 2. 编码基本知识 最早的编码是iso8859-1,和ascii编码相似.但为了方便表

快速解码base64和utf-8的ASCII编码和URL解码

看论坛上总是有人发乱七八糟的文字,根本看不懂,用下面的方法解密一下. 只要有浏览器的开发者工具就行了. UTF-8解码 console.log("\u5475\u5475") URL解码(在ES6中被标记为Draft) unescape("%u5475%u5475") Base64解码 decodeURIComponent(escape(atob( "5ZG15ZG1=" ))); 使用函数: function utf8_to_b64( str

UNICODE,GBK,UTF-8区别

UNICODE,GBK,UTF-8区别    简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与gbk就是不一样的,假设uncode为a040,gbk为b030,而uft-8码,就是把那个值表现的形式.utf-8码完全只针对uncode来组织的,如果GBK要转UTF-8必须先转uncode码,再转utf-8就OK了.详细的就见下面转的这篇文章. 谈谈

UNICODE,GBK,UTF-8

UNICODE,GBK,UTF-8 UNICODE,GBK,UTF-8    简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与gbk就是不一样的,假设uncode为a040,gbk为b030,而uft-8码,就是把那个值表现的形式.utf-8码完全只针对uncode来组织的,如果GBK要转UTF-8必须先转uncode码,再转utf-8就OK了.详

关于URL 解码, 编码

由于近期客户需要用到CA认证,此CA认证采用的是URL方式出传值 使用指定的编码对象将 URL 编码的字符串转换为已解码的字符串. 编码个人理解就是将某字符串以某种方式储存起来,而解码则以其编码格式得出正确的结果 一般编码关键字 Encoding 引入命名空间:System.Text url编码引入命名空间:   System.Web 程序集:System.Web(在 System.Web.dll 中) URL编码 名称 说明 返回值 实例 UrlEncode(Byte[] ) 将字节数组转换为

UTF-8 GBK UTF8 GB2312之间的区别和关系

UTF-8 GBK UTF8 GB2312之间的区别和关系 UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码.UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强.UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示.如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包.

【好程序员笔记分享】——URL解码与编码

-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ 1.url编码 ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是: NSString * encodingString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 2.url解码 请求后,返回的数据,如何显示的是这样的格式:://,此时需要我们进行UTF-8解码,用到的方法是

UNICODE,GBK,UTF-8区别【转载】

UNICODE,GBK,UTF-8区别 简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与gbk就是不一样的,假设uncode为a040,gbk为b030,而uft-8码,就是把那个值表现的形式.utf-8码完全只针对uncode来组织的,如果GBK要转UTF-8必须先转uncode码,再转utf-8就OK了.详细的就见下面转的这篇文章. 谈谈Uni

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

本文主要讨论中文url解码实现问题,没有具体解说url编码,utf-8编码.想对编解码问题有更加具体的了解,请查阅相关文档 url编码:实质字符ascii码的十六进制.仅仅是略微有些变动,须要在前面加上"%".比方"\",它的ascii码是92,92的十六进制是5c,所以"\"的url编码就是%5c. UTF-8 编码是UNICODE的一种变长字符编码,由Ken Thompson于1992年创建.如今已经标准化为RFC 3629.UTF-8用1到