• C++ URLDecode和URLEncode实现——仅限gb2312,非utf8


    转载——http://blog.163.com/zhangjie_0303/blog/static/9908270620148251658993/
     
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
     
    using namespace std;
     
    typedef unsigned char BYTE;  
       
        inline BYTE toHex(const BYTE &x)  
        {  
            return x > 9 ? x -10 + 'A': x + '0';  
        }  
      
        inline BYTE fromHex(const BYTE &x)  
        {  
            return isdigit(x) ? x-'0' : x-'A'+10;  
        }  
       
        inline string URLEncode(const string &sIn)  
        {  
            string sOut;  
            for( size_t ix = 0; ix < sIn.size(); ix++ )  
            {        
                BYTE buf[4];  
                memset( buf, 0, 4 );  
                if( isalnum( (BYTE)sIn[ix] ) )  
                {        
                    buf[0] = sIn[ix];  
                }  
                //else if ( isspace( (BYTE)sIn[ix] ) ) //貌似把空格编码成%20或者+都可以  
                //{  
                //    buf[0] = '+';  
                //}  
                else  
                {  
                    buf[0] = '%';  
                    buf[1] = toHex( (BYTE)sIn[ix] >> 4 );  
                    buf[2] = toHex( (BYTE)sIn[ix] % 16);  
                }  
                sOut += (char *)buf;  
            }  
            return sOut;  
        };  
      
        inline string URLDecode(const string &sIn)  
        {  
            string sOut;  
            for( size_t ix = 0; ix < sIn.size(); ix++ )  
            {  
                BYTE ch = 0;  
                if(sIn[ix]=='%')  
                {  
                    ch = (fromHex(sIn[ix+1])<<4);  
                    ch |= fromHex(sIn[ix+2]);  
                    ix += 2;  
                }  
                else if(sIn[ix] == '+')  
                {  
                    ch = ' ';  
                }  
                else  
                {  
                    ch = sIn[ix];  
                }  
                sOut += (char)ch;  
            }  
            return sOut;  
        }  
     
    /*int main(int argc, char** argv)
    {
            string test_str1 = "老同学";
            //string test_str2 = URLEncode(test_str1);
            string test_str2 = "%89%E6%B1%89%E6%B1%89";
            cout << "test_str2=" << test_str2 <<endl;
            string test_str3 = URLDecode(test_str2);
            cout << "test_str3=" << test_str3 <<endl;
            return 0;
    }*/
  • 相关阅读:
    LOJ #2109. 「JLOI2015」骗我呢 数形结合+组合+容斥
    LOJ #2729. 「JOISC 2016 Day 1」俄罗斯套娃 扫描线+贪心
    LOJ #2508. 「AHOI / HNOI2018」游戏 拓扑排序
    LOJ #2106. 「JLOI2015」有意义的字符串 构造+矩阵乘法
    LOJ #2471. 「九省联考 2018」一双木棋 记忆化搜索
    python的md5和base64加密
    [转]python的find()方法
    [转]python的startswith()方法
    获取http请求的响应状态
    with...as...用法
  • 原文地址:https://www.cnblogs.com/yiguxianyun/p/6063043.html
Copyright © 2020-2023  润新知