C++ URL encode/decode (gb2312)

    char Dec2HexChar(short int n)
    {
        if ( 0 <= n && n <= 9 ) {
            return char( short('0') + n );
        } else if ( 10 <= n && n <= 15 ) {
            return char( short('A') + n - 10 );
        } else {
            return char(0);
        }
    }  

    short int HexChar2Dec(char c)
    {
        if ( '0'<=c && c<='9' ) {
            return short(c-'0');
        } else if ( 'a'<=c && c<='f' ) {
            return ( short(c-'a') + 10 );
        } else if ( 'A'<=c && c<='F' ) {
            return ( short(c-'A') + 10 );
        } else {
            return -1;
        }
    }  

    string EncodeURL(const string &URL)
    {
        string strResult = "";
        for ( unsigned int i=0; i<URL.size(); i++ )
        {
            char c = URL[i];
            if (
                ( '0'<=c && c<='9' ) ||
                ( 'a'<=c && c<='z' ) ||
                ( 'A'<=c && c<='Z' ) ||
                c=='/' || c=='.'
                ) {
                    strResult += c;
            }
            else
            {
                int j = (short int)c;
                if ( j < 0 )
                {
                    j += 256;
                }
                int i1, i0;
                i1 = j / 16;
                i0 = j - i1*16;
                strResult += '%';
                strResult += Dec2HexChar(i1);
                strResult += Dec2HexChar(i0);
            }
        }  

        return strResult;
    }  

    std::string DecodeURL(const std::string &URL)
    {
        string result = "";
        for ( unsigned int i=0; i<URL.size(); i++ )
        {
            char c = URL[i];
            if ( c != '%' )
            {
                result += c;
            }
            else
            {
                char c1 = URL[++i];
                char c0 = URL[++i];
                int num = 0;
                num += HexChar2Dec(c1) * 16 + HexChar2Dec(c0);
                result += char(num);
            }
        }  

        return result;
    }  

时间: 2024-10-06 22:30:04

C++ URL encode/decode (gb2312)的相关文章

c++ encode decode

1 std::string UrlEncode(const std::string& szToEncode) 2 { 3 std::string src = szToEncode; 4 char hex[] = "0123456789ABCDEF"; 5 string dst; 6 7 for (size_t i = 0; i < src.size(); ++i) 8 { 9 unsigned char cc = src[i]; 10 if (isascii(cc)) 1

node_nibbler:自定义Base32/base64 encode/decode库

https://github.com/mattrobenolt/node_nibbler 可以将本源码复制到自己需要的JS文件中,比如下面这个文件,一个基于BASE64加密请求参数的REST工具: [附件:]REST-TEST.html <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

[Python函数]encode,decode

前言: 我们知道,计算机是以二进制为单位的,也就是说计算机只识别0和1,也就是我们平时在电脑上看到的文字,只有先变成0和1,计算机才会识别它的意思.这种数据和二进制的转换规则就是编码.计算机的发展中,有ASCII码,GBK,Unicode,utf-8编码.我们先从编码的发展史了解一下编码的进化过程. 编码发展史 美国人发明了计算机,用八位0和1的组合,一一对应英文中的字符,整出了一个表格,ASCII表. 计算机传入中国,中国地大物博,繁体字和简体字多,8位字节最多表示256个字符,满足不了,于是

URL Encode

用VC实现post数据常常会遇到URL编码问题 在此封装一个工具类进行UTF8编码的转换 源码来自php source code 只是简单的封装给C++调用 [cpp] view plaincopy //URL 编解码类 //来自PHP源码 class CRtUrlConv { public: static char *urlencode(const char *in_str ) { char *out_str; int in_str_len, out_str_len; in_str_len=s

你真的了解URL encode吗?

最近因项目需要,需重写网络组件.在重写及review项目组的网络组件旧代码时,发现对URL编码有不严谨之处.当说到这种写法其实是有问题时,几个同事都表示非常诧异并几度辩驳.本人表示有点小心惊,在网上搜索时还真的很少有另外的写法.在此以自己的一些理解和经验,做一下URL编码的普及,希望对大家有所帮助,有问题也请不吝赐教. (参考RFC1738,3986,6874,7320) 一.了解URL编码以及编码时机.运算过程 URI包括URL和URN,常用说法URL encode实际是遵循URI的相关文件.

Javascript Base64 Encode &amp; Decode

html代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Page Title</title> 5 <style type="text/css"> 6 *{font-family: Consolas;font-style: italic} 7 .responsebox{width:900px;margin:10px auto;padding:10px;border:2

get请求中的url encode问题

首先发表一下感慨,Python的requests模块确实太简便,省却了很多的转码等等等等的问题,但这也是缺点,对于我这种基础不好的同学来说让我少知道了许多本来应该知道的东西. url encode: 对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:8080/servlet?msg=abc (很常见的一个乱码问题就要出现了,如果url中出现中文或其它特殊字符的话,如:http://localhost:8080 /servlet?msg=杭州,服务

【python】UnicodeEncodeError: &#39;ascii&#39; codec can&#39;t encode/decode characters

解决方案在文件头插入 # encoding=utf8 import sys reload(sys) sys.setdefaultencoding('utf8') [python]UnicodeEncodeError: 'ascii' codec can't encode/decode characters

URL编码 utf-8 gb2312的区别

一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址“http://www.abc.com”,但是没有希腊字母的网址“http://www.aβγ.com”(读作阿尔法-贝塔-伽玛.com).这是因为网络标准RFC 1738做了硬性规定: "...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!