• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 298  文章 - 377  trackbacks - 0
            <2016年11月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            常用鏈接

            留言簿(34)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            收藏夾

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            VC URLEncode & UrlDecode
             
            #define IsHexNum(c) ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'))

            CString Utf8ToStringT(LPSTR str)
            {
                _ASSERT(str);
                USES_CONVERSION;
                WCHAR 
            *buf;
                
            int length = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
                buf 
            = new WCHAR[length+1];
                ZeroMemory(buf, (length
            +1* sizeof(WCHAR));
                MultiByteToWideChar(CP_UTF8, 
            0, str, -1, buf, length);

                
            return (CString(W2T(buf)));
            }

            /*
            CString UrlDecode(LPCTSTR url)
            {
                _ASSERT(url);
                USES_CONVERSION;
                LPSTR _url = T2A(const_cast<LPTSTR>(url));
                int i = 0;
                int length = (int)strlen(_url);
                CHAR *buf = new CHAR[length];
                ZeroMemory(buf, length);
                LPSTR p = buf;
                while(i < length)
                {
                    if(i <= length -3 && _url[i] == '%' && IsHexNum(_url[i+1]) && IsHexNum(_url[i+2]))
                    {
                        sscanf(_url + i + 1, "%x", p++);
                        i += 3;
                    }
                    else
                    {
                        *(p++) = _url[i++];
                    }
                }
                //return Utf8ToStringT(buf);
                return CString(buf);
            }
            */

            CString UrlDecode(LPCTSTR url)
            {
                _ASSERT(url);
                USES_CONVERSION;
                LPSTR _url 
            = T2A(const_cast<LPTSTR>(url));
                
            int i = 0;
                
            int length = (int)strlen(_url);
                CHAR 
            *buf = new CHAR[length];
                ZeroMemory(buf, length);
                LPSTR p 
            = buf;
                
            char tmp[4];
                
            while(i < length)
                
            {
                    
            if(i <= length -3 && _url[i] == '%' && IsHexNum(_url[i+1]) && IsHexNum(_url[i+2]))
                    
            {
                        memset(tmp, 
            0sizeof(tmp));
                        memcpy(tmp, _url 
            + i + 1,2); 
                        sscanf(tmp, 
            "%x", p++);
                        i 
            += 3;
                    }

                    
            else
                    
            {
                        
            *(p++= _url[i++];
                    }

                }

                
            return Utf8ToStringT(buf);
            }


            void ConvertUtf8ToGBK(CString& strUtf8) 
            {
                
            int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
                unsigned 
            short * wszGBK = new unsigned short[len+1];
                memset(wszGBK, 
            0, len * 2 + 2);
                MultiByteToWideChar(CP_UTF8, 
            0, (LPCTSTR)strUtf8, -1, wszGBK, len);
                len 
            = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
                
            char *szGBK=new char[len + 1];
                memset(szGBK, 
            0, len + 1);
                WideCharToMultiByte (CP_ACP, 
            0, wszGBK, -1, szGBK, len, NULL,NULL);

                strUtf8 
            = szGBK;
                delete[] szGBK;
                delete[] wszGBK;
            }


            void ConvertGBKToUtf8(CString& strGBK)
            {
                
            int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, NULL,0);
                unsigned 
            short * wszUtf8 = new unsigned short[len+1];
                memset(wszUtf8, 
            0, len * 2 + 2);
                MultiByteToWideChar(CP_ACP, 
            0, (LPCTSTR)strGBK, -1, wszUtf8, len);

                len 
            = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
                
            char *szUtf8=new char[len + 1];
                memset(szUtf8, 
            0, len + 1);
                WideCharToMultiByte (CP_UTF8, 
            0, wszUtf8, -1, szUtf8, len, NULL,NULL);

                strGBK 
            = szUtf8;
                delete[] szUtf8;
                delete[] wszUtf8;
            }


            void UTF_8ToUnicode(WCHAR* pOut,char *pText)
            {
                
            char* uchar = (char *)pOut;
             
                uchar[
            1= ((pText[0& 0x0F<< 4+ ((pText[1>> 2& 0x0F);
                uchar[
            0= ((pText[1& 0x03<< 6+ (pText[2& 0x3F);
             
                
            return;
            }


            // Unicode 轉換成UTF-8  
            void UnicodeToUTF_8(char* pOut,WCHAR* pText)
            {
                
            // 注意 WCHAR高低字的順序,低字節在前,高字節在后
                char* pchar = (char *)pText;
             
                pOut[
            0= (0xE0 | ((pchar[1& 0xF0>> 4));
                pOut[
            1= (0x80 | ((pchar[1& 0x0F<< 2)) + ((pchar[0& 0xC0>> 6);
                pOut[
            2= (0x80 | (pchar[0& 0x3F));
             
                
            return;
            }


            // 把Unicode 轉換成 GB2312  
            void UnicodeToGB2312(char* pOut,unsigned short uData)
            {
                WideCharToMultiByte(CP_ACP,NULL,
            &uData,1,pOut,sizeof(WCHAR),NULL,NULL);
                
            return;
            }
               

            // GB2312 轉換成 Unicode
            void Gb2312ToUnicode(WCHAR* pOut,char *gbBuffer)
            {
                ::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,
            2,pOut,1);
                
            return;
            }


            //GB2312 轉為 UTF-8
            void GB2312ToUTF_8(CString& pOut,char *pText, int pLen)
            {
                
            char buf[1024];
                
            char* rst = new char[pLen + (pLen >> 2+ 2];
             
                memset(buf,
            0,1024);
                memset(rst,
            0,pLen + (pLen >> 2+ 2);
             
                
            int i = 0;
                
            int j = 0;   
                
            while(i < pLen)
                
            {
                    
            //如果是英文直接復制就可以
                    if*(pText + i) >= 0)
                    
            {
                        rst[j
            ++= pText[i++];
                    }

                    
            else
                    
            {
                        WCHAR pbuffer;
                        Gb2312ToUnicode(
            &pbuffer,pText+i);

                        UnicodeToUTF_8(buf,
            &pbuffer);

                        unsigned 
            short int tmp = 0;
                        tmp 
            = rst[j] = buf[0];
                        tmp 
            = rst[j+1= buf[1];
                        tmp 
            = rst[j+2= buf[2];

                        j 
            += 3;
                        i 
            += 2;
                    }

                }

                strcpy(
            &rst[j],"\0");
             
                
            //返回結果
                pOut = rst;   
                delete []rst;   

                
            return;
            }


            //UTF-8 轉為 GB2312
            void UTF_8ToGB2312(CString &pOut, char *pText, int pLen)
            {
                
            char * newBuf = new char[pLen];
                
            char Ctemp[4];
                memset(Ctemp,
            0,4);
             
                
            int i =0;
                
            int j = 0;
             
                
            while(i < pLen)
                
            {
                    
            if(pText[i] > 0)
                    
            {
                        newBuf[j
            ++= pText[i++];   
                    }

                    
            else   
                    
            {
                        WCHAR Wtemp;
                        UTF_8ToUnicode(
            &Wtemp,pText + i);

                        UnicodeToGB2312(Ctemp,Wtemp);

                        newBuf[j] 
            = Ctemp[0];
                        newBuf[j 
            + 1= Ctemp[1];

                        i 
            += 3;   
                        j 
            += 2;   
                    }

                }

                strcpy(
            &newBuf[j],"\0");
             
                pOut 
            = newBuf;
                delete []newBuf;
             
                
            return;  
            }



            CString UTF8_Encode(LPTSTR strUnicode)   
            {   
                
            long TLen ;   
                CString UTF8_EncodeLong ;   

                TLen 
            = CString(strUnicode).GetLength() ;   

                
            if(TLen == 0)   
                
            {   
                    
            return CString(strUnicode);   
                }
               

                
            long lngBufferSize ;   
                
            long lngResult ;   

                
            //Set buffer for longest possible string.   
                lngBufferSize = TLen * 3 + 1 ;   
                
            char *bytUtf8 = new char[lngBufferSize] ;   

                
            //Translate using code page 65001(UTF-8).   

                lngResult 
            = WideCharToMultiByte(CP_UTF8, 0, (unsigned short*)strUnicode, TLen, bytUtf8, lngBufferSize, NULL, 0) ;   

                bytUtf8[lngResult] 
            = NULL ;   

                
            return CString(bytUtf8) ;
            }

            /*************************************************************************/
            inline BYTE toHex(
            const BYTE &x)
            {
             
            return x > 9 ? x + 55: x + 48;
            }


            CString URLEncode(CString sIn)
            {
            CString sOut;
            const int nLen = sIn.GetLength() + 1;
            register LPBYTE pOutTmp 
            = NULL;
            LPBYTE pOutBuf 
            = NULL;
            register LPBYTE pInTmp 
            = NULL;
            LPBYTE pInBuf 
            =(LPBYTE)sIn.GetBuffer(nLen);
            BYTE b 
            = 0;

            //alloc out buffer
            pOutBuf = (LPBYTE)sOut.GetBuffer(nLen*3 - 2);//new BYTE [nLen * 3];

            if(pOutBuf)
            {
            pInTmp 
            = pInBuf;
            pOutTmp 
            = pOutBuf;

            // do encoding
            while (*pInTmp)
            {
            if(isalnum(*pInTmp))
            *pOutTmp++ = *pInTmp;
            else
            if(isspace(*pInTmp))
            *pOutTmp++ = '+';
            else
            {
            *pOutTmp++ = '%';
            *pOutTmp++ = toHex(*pInTmp>>4);
            *pOutTmp++ = toHex(*pInTmp%16);
            }

            pInTmp
            ++;
            }

            *pOutTmp = '\0';
            //sOut=pOutBuf;
            //delete [] pOutBuf;
            sOut.ReleaseBuffer();
            }

            sIn.ReleaseBuffer();
            return sOut;
            }

             

            http://blog.csdn.net/leechiyang/archive/2008/02/22/2112915.aspx

            http://blog.csdn.net/zhengyun_ustc/archive/2002/05/20/12654.aspx

            URLEncode:
            inline BYTE toHex(const BYTE &x)
            {
            return x > 9 ? x + 55: x + 48;
            }

            CString URLEncode(CString sIn)
            {
            CString sOut;
            const int nLen = sIn.GetLength() + 1;
            register LPBYTE pOutTmp = NULL;
            LPBYTE pOutBuf = NULL;
            register LPBYTE pInTmp = NULL;
            LPBYTE pInBuf =(LPBYTE)sIn.GetBuffer(nLen);
            BYTE b = 0;

            //alloc out buffer
            pOutBuf = (LPBYTE)sOut.GetBuffer(nLen*3 - 2);//new BYTE [nLen * 3];

            if(pOutBuf)
            {
            pInTmp = pInBuf;
            pOutTmp = pOutBuf;

            // do encoding
            while (*pInTmp)
            {
            if(isalnum(*pInTmp))
            *pOutTmp++ = *pInTmp;
            else
            if(isspace(*pInTmp))
            *pOutTmp++ = '+';
            else
            {
            *pOutTmp++ = '%';
            *pOutTmp++ = toHex(*pInTmp>>4);
            *pOutTmp++ = toHex(*pInTmp%16);
            }
            pInTmp++;
            }
            *pOutTmp = '\0';
            //sOut=pOutBuf;
            //delete [] pOutBuf;
            sOut.ReleaseBuffer();
            }
            sIn.ReleaseBuffer();
            return sOut;
            }

             

            UrlDecode:
            #define IsHexNum(c) ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'))

            CString Utf8ToStringT(LPSTR str)
            {
            _ASSERT(str);
            USES_CONVERSION;
            WCHAR *buf;
            int length = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
            buf = new WCHAR[length+1];
            ZeroMemory(buf, (length+1) * sizeof(WCHAR));
            MultiByteToWideChar(CP_UTF8, 0, str, -1, buf, length);

            return (CString(W2T(buf)));
            }

            CString UrlDecode(LPCTSTR url)
            {
            _ASSERT(url);
            USES_CONVERSION;
            LPSTR _url = T2A(const_cast<LPTSTR>(url));
            int i = 0;
            int length = (int)strlen(_url);
            CHAR *buf = new CHAR[length];
            ZeroMemory(buf, length);
            LPSTR p = buf;
            while(i < length)
            {
            if(i <= length -3 && _url[i] == '%' && IsHexNum(_url[i+1]) && IsHexNum(_url[i+2]))
            {
            sscanf(_url + i + 1, "%x", p++);
            i += 3;
            }
            else
            {
            *(p++) = _url[i++];
            }
            }
            return Utf8ToStringT(buf);

            #define IsHexNum(c) ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'))

            CString Utf8ToStringT(LPSTR str)
            {
                _ASSERT(str);
                USES_CONVERSION;
                WCHAR 
            *buf;
                
            int length = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
                buf 
            = new WCHAR[length+1];
                ZeroMemory(buf, (length
            +1* sizeof(WCHAR));
                MultiByteToWideChar(CP_UTF8, 
            0, str, -1, buf, length);

                
            return (CString(W2T(buf)));
            }

            /*
            CString UrlDecode(LPCTSTR url)
            {
                _ASSERT(url);
                USES_CONVERSION;
                LPSTR _url = T2A(const_cast<LPTSTR>(url));
                int i = 0;
                int length = (int)strlen(_url);
                CHAR *buf = new CHAR[length];
                ZeroMemory(buf, length);
                LPSTR p = buf;
                while(i < length)
                {
                    if(i <= length -3 && _url[i] == '%' && IsHexNum(_url[i+1]) && IsHexNum(_url[i+2]))
                    {
                        sscanf(_url + i + 1, "%x", p++);
                        i += 3;
                    }
                    else
                    {
                        *(p++) = _url[i++];
                    }
                }
                //return Utf8ToStringT(buf);
                return CString(buf);
            }
            */

            CString UrlDecode(LPCTSTR url)
            {
                _ASSERT(url);
                USES_CONVERSION;
                LPSTR _url 
            = T2A(const_cast<LPTSTR>(url));
                
            int i = 0;
                
            int length = (int)strlen(_url);
                CHAR 
            *buf = new CHAR[length];
                ZeroMemory(buf, length);
                LPSTR p 
            = buf;
                
            char tmp[4];
                
            while(i < length)
                
            {
                    
            if(i <= length -3 && _url[i] == '%' && IsHexNum(_url[i+1]) && IsHexNum(_url[i+2]))
                    
            {
                        memset(tmp, 
            0sizeof(tmp));
                        memcpy(tmp, _url 
            + i + 1,2); 
                        sscanf(tmp, 
            "%x", p++);
                        i 
            += 3;
                    }

                    
            else
                    
            {
                        
            *(p++= _url[i++];
                    }

                }

                
            return Utf8ToStringT(buf);
            }


            void ConvertUtf8ToGBK(CString& strUtf8) 
            {
                
            int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
                unsigned 
            short * wszGBK = new unsigned short[len+1];
                memset(wszGBK, 
            0, len * 2 + 2);
                MultiByteToWideChar(CP_UTF8, 
            0, (LPCTSTR)strUtf8, -1, wszGBK, len);
                len 
            = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
                
            char *szGBK=new char[len + 1];
                memset(szGBK, 
            0, len + 1);
                WideCharToMultiByte (CP_ACP, 
            0, wszGBK, -1, szGBK, len, NULL,NULL);

                strUtf8 
            = szGBK;
                delete[] szGBK;
                delete[] wszGBK;
            }


            void ConvertGBKToUtf8(CString& strGBK)
            {
                
            int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, NULL,0);
                unsigned 
            short * wszUtf8 = new unsigned short[len+1];
                memset(wszUtf8, 
            0, len * 2 + 2);
                MultiByteToWideChar(CP_ACP, 
            0, (LPCTSTR)strGBK, -1, wszUtf8, len);

                len 
            = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
                
            char *szUtf8=new char[len + 1];
                memset(szUtf8, 
            0, len + 1);
                WideCharToMultiByte (CP_UTF8, 
            0, wszUtf8, -1, szUtf8, len, NULL,NULL);

                strGBK 
            = szUtf8;
                delete[] szUtf8;
                delete[] wszUtf8;
            }


            void UTF_8ToUnicode(WCHAR* pOut,char *pText)
            {
                
            char* uchar = (char *)pOut;
             
                uchar[
            1= ((pText[0& 0x0F<< 4+ ((pText[1>> 2& 0x0F);
                uchar[
            0= ((pText[1& 0x03<< 6+ (pText[2& 0x3F);
             
                
            return;
            }


            // Unicode 轉換成UTF-8  
            void UnicodeToUTF_8(char* pOut,WCHAR* pText)
            {
                
            // 注意 WCHAR高低字的順序,低字節在前,高字節在后
                char* pchar = (char *)pText;
             
                pOut[
            0= (0xE0 | ((pchar[1& 0xF0>> 4));
                pOut[
            1= (0x80 | ((pchar[1& 0x0F<< 2)) + ((pchar[0& 0xC0>> 6);
                pOut[
            2= (0x80 | (pchar[0& 0x3F));
             
                
            return;
            }


            // 把Unicode 轉換成 GB2312  
            void UnicodeToGB2312(char* pOut,unsigned short uData)
            {
                WideCharToMultiByte(CP_ACP,NULL,
            &uData,1,pOut,sizeof(WCHAR),NULL,NULL);
                
            return;
            }
               

            // GB2312 轉換成 Unicode
            void Gb2312ToUnicode(WCHAR* pOut,char *gbBuffer)
            {
                ::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,
            2,pOut,1);
                
            return;
            }


            //GB2312 轉為 UTF-8
            void GB2312ToUTF_8(CString& pOut,char *pText, int pLen)
            {
                
            char buf[1024];
                
            char* rst = new char[pLen + (pLen >> 2+ 2];
             
                memset(buf,
            0,1024);
                memset(rst,
            0,pLen + (pLen >> 2+ 2);
             
                
            int i = 0;
                
            int j = 0;   
                
            while(i < pLen)
                
            {
                    
            //如果是英文直接復制就可以
                    if*(pText + i) >= 0)
                    
            {
                        rst[j
            ++= pText[i++];
                    }

                    
            else
                    
            {
                        WCHAR pbuffer;
                        Gb2312ToUnicode(
            &pbuffer,pText+i);

                        UnicodeToUTF_8(buf,
            &pbuffer);

                        unsigned 
            short int tmp = 0;
                        tmp 
            = rst[j] = buf[0];
                        tmp 
            = rst[j+1= buf[1];
                        tmp 
            = rst[j+2= buf[2];

                        j 
            += 3;
                        i 
            += 2;
                    }

                }

                strcpy(
            &rst[j],"\0");
             
                
            //返回結果
                pOut = rst;   
                delete []rst;   

                
            return;
            }


            //UTF-8 轉為 GB2312
            void UTF_8ToGB2312(CString &pOut, char *pText, int pLen)
            {
                
            char * newBuf = new char[pLen];
                
            char Ctemp[4];
                memset(Ctemp,
            0,4);
             
                
            int i =0;
                
            int j = 0;
             
                
            while(i < pLen)
                
            {
                    
            if(pText[i] > 0)
                    
            {
                        newBuf[j
            ++= pText[i++];   
                    }

                    
            else   
                    
            {
                        WCHAR Wtemp;
                        UTF_8ToUnicode(
            &Wtemp,pText + i);

                        UnicodeToGB2312(Ctemp,Wtemp);

                        newBuf[j] 
            = Ctemp[0];
                        newBuf[j 
            + 1= Ctemp[1];

                        i 
            += 3;   
                        j 
            += 2;   
                    }

                }

                strcpy(
            &newBuf[j],"\0");
             
                pOut 
            = newBuf;
                delete []newBuf;
             
                
            return;  
            }



            CString UTF8_Encode(LPTSTR strUnicode)   
            {   
                
            long TLen ;   
                CString UTF8_EncodeLong ;   

                TLen 
            = CString(strUnicode).GetLength() ;   

                
            if(TLen == 0)   
                
            {   
                    
            return CString(strUnicode);   
                }
               

                
            long lngBufferSize ;   
                
            long lngResult ;   

                
            //Set buffer for longest possible string.   
                lngBufferSize = TLen * 3 + 1 ;   
                
            char *bytUtf8 = new char[lngBufferSize] ;   

                
            //Translate using code page 65001(UTF-8).   

                lngResult 
            = WideCharToMultiByte(CP_UTF8, 0, (unsigned short*)strUnicode, TLen, bytUtf8, lngBufferSize, NULL, 0) ;   

                bytUtf8[lngResult] 
            = NULL ;   

                
            return CString(bytUtf8) ;
            }

            /*************************************************************************/
            inline BYTE toHex(
            const BYTE &x)
            {
             
            return x > 9 ? x + 55: x + 48;
            }


            CString URLEncode(CString sIn)
            {
            CString sOut;
            const int nLen = sIn.GetLength() + 1;
            register LPBYTE pOutTmp 
            = NULL;
            LPBYTE pOutBuf 
            = NULL;
            register LPBYTE pInTmp 
            = NULL;
            LPBYTE pInBuf 
            =(LPBYTE)sIn.GetBuffer(nLen);
            BYTE b 
            = 0;

            //alloc out buffer
            pOutBuf = (LPBYTE)sOut.GetBuffer(nLen*3 - 2);//new BYTE [nLen * 3];

            if(pOutBuf)
            {
            pInTmp 
            = pInBuf;
            pOutTmp 
            = pOutBuf;

            // do encoding
            while (*pInTmp)
            {
            if(isalnum(*pInTmp))
            *pOutTmp++ = *pInTmp;
            else
            if(isspace(*pInTmp))
            *pOutTmp++ = '+';
            else
            {
            *pOutTmp++ = '%';
            *pOutTmp++ = toHex(*pInTmp>>4);
            *pOutTmp++ = toHex(*pInTmp%16);
            }

            pInTmp
            ++;
            }

            *pOutTmp = '\0';
            //sOut=pOutBuf;
            //delete [] pOutBuf;
            sOut.ReleaseBuffer();
            }

            sIn.ReleaseBuffer();
            return sOut;
            }

            }



            posted on 2012-06-15 23:18 聶文龍 閱讀(5445) 評論(2)  編輯 收藏 引用

            FeedBack:
            # re: VC URLEncode & UrlDecode 2016-01-10 00:15 聶文龍
            //從 URL 專用格式字符串還原成普通字符串

            #include <iconv.h>
            #include <iostream>

            using namespace std;

            char Char2Int(char ch){
            if(ch>='0' && ch<='9')return (char)(ch-'0');
            if(ch>='a' && ch<='f')return (char)(ch-'a'+10);
            if(ch>='A' && ch<='F')return (char)(ch-'A'+10);
            return -1;
            }

            char Str2Bin(char *str){
            char tempWord[2];
            char chn;

            tempWord[0] = Char2Int(str[0]); //make the B to 11 -- 00001011
            tempWord[1] = Char2Int(str[1]); //make the 0 to 0 -- 00000000

            chn = (tempWord[0] << 4) | tempWord[1]; //to change the BO to 10110000

            return chn;
            }

            string UrlDecode(string str){
            string output="";
            char tmp[2];
            int i=0,idx=0,ndx,len=str.length();

            while(i<len){
            if(str[i]=='%'){
            tmp[0]=str[i+1];
            tmp[1]=str[i+2];
            output+=Str2Bin(tmp);
            i=i+3;
            }
            else if(str[i]=='+'){
            output+=' ';
            i++;
            }
            else{
            output+=str[i];
            i++;
            }
            }

            return output;
            }

            // 代碼轉換操作類 用于將utf-8 格式轉成 gb2312
            class CodeConverter {
            private:
            iconv_t cd;
            public:
            CodeConverter(const char *from_charset,const char *to_charset) {// 構造
            cd = iconv_open(to_charset,from_charset);
            }

            ~CodeConverter() {// 析構
            iconv_close(cd);
            }

            int convert(char *inbuf,int inlen,char *outbuf,int outlen) {// 轉換輸出
            char **pin = &inbuf;
            char **pout = &outbuf;

            memset(outbuf,0,outlen);
            return iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen);
            }
            };

            //輸入url_Utf-8 ,輸出 gb2312
            string Url2Str_Utf8(string instr){
            string input;
            input=UrlDecode(instr);

            const int outlen=instr.length();
            char output[outlen];

            CodeConverter cc = CodeConverter("utf-8","gb2312");
            cc.convert((char *)input.c_str(),strlen(input.c_str()),output,outlen);

            return output;
            }

            //輸入url_gb2312 ,輸出 gb2312 實際上是直接調用 UrlDecode()
            string Url2Str_gb2312(string str){
            return UrlDecode(str);
            }


            //示例程序
            /*int main(){
            //char out2[OUTLEN];

            //+中國哈哈哈終于得了^_^
            cout<<"Url2String_gb2312:"<<Url2String_gb2312("%2B%D6%D0%B9%FA%B9%FE%B9%FE%B9%FE%D6%D5%D3%DA%B5%C3%C1%CB%5E_%5E")<<endl;
            cout<<"Url2String_Utf8:"<<Url2String_Utf8("%2B%E4%B8%AD%E5%9B%BD%E5%93%88%E5%93%88%E5%93%88%E7%BB%88%E4%BA%8E%E5%BE%97%E4%BA%86%5E_%5E")<<endl;

            // utf-8-->gb2312

            //cout << "utf-8-->gb2312 in=" << out1 << ",out=" << out2 << endl;
            //cout<<Url2String_Utf8(out1);

            return 0;
            }*/  回復  更多評論
              
            # re: VC URLEncode & UrlDecode 2016-01-10 00:18 聶文龍
            狠狠色丁香久久婷婷综合| 国产激情久久久久影院老熟女免费| 91精品国产综合久久婷婷| 欧美大战日韩91综合一区婷婷久久青草 | 久久国产综合精品五月天| 欧美激情精品久久久久久久| 亚洲精品成人网久久久久久| 一级做a爰片久久毛片看看| 久久亚洲高清观看| 久久精品国产亚洲一区二区| 2022年国产精品久久久久| 色综合久久无码中文字幕| 色偷偷久久一区二区三区| 午夜精品久久久久久毛片| 亚洲狠狠婷婷综合久久蜜芽| 一级做a爰片久久毛片看看| 国产精品久久久99| 国产精品久久久久天天影视| 欧美粉嫩小泬久久久久久久 | 无码精品久久久久久人妻中字| 久久久久久久波多野结衣高潮| 久久国产亚洲精品| 97久久久精品综合88久久| 久久午夜综合久久| 狠狠色噜噜色狠狠狠综合久久 | 日韩av无码久久精品免费| 日韩精品久久无码中文字幕| 99久久婷婷国产综合亚洲| 国产精品久久国产精品99盘| 国产成人久久精品麻豆一区| 久久亚洲国产成人影院网站| 久久受www免费人成_看片中文| 久久久久波多野结衣高潮| 欧美黑人又粗又大久久久| 久久国产一区二区| 亚洲Av无码国产情品久久| 久久99久久99精品免视看动漫 | 韩国三级大全久久网站| 精品国产综合区久久久久久| 日本五月天婷久久网站| 久久久精品人妻一区二区三区四|