C++ URL encode/decode (gb2312)

来源:互联网 发布:在线音乐网站 java 编辑:程序博客网 时间:2024/06/05 11:22
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;}