• <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>
            隨筆-3  評論-13  文章-10  trackbacks-0
            目前的互聯網,是屬于世界的。越來越多的郵件,編碼都是用UTF8。但對于我們習慣還是用ASCII/GB2312來顯示/編輯。所以UTF8的編碼內容需要轉換,特地寫了一個類,來封裝解析的部分。

            /*?UTF8Charset.h?*/
            class?CUTF8Charset??
            {
            public:
            ????CUTF8Charset();
            ????
            virtual?~CUTF8Charset();

            public:
            ????
            static?void?UTF_8ToGB2312(CString?&strOut,?char?*pText,?int?pLen);
            ????
            static?void?GB2312ToUTF_8(CString?&strOut,?char?*pText,?int?pLen);

            ????
            static?void?UTF_8ToGB2312(char?*pOut,?char?*pText,?int?pLen);
            ????
            static?void?GB2312ToUTF_8(char?*pOut,?char?*pText,?int?pLen);

            ????
            //?Unicode?轉換成UTF-8
            ????static?void?UnicodeToUTF_8(char*?pOut,WCHAR*?pText);
            ????
            //?GB2312?轉換成 Unicode
            ????static?void?Gb2312ToUnicode(WCHAR*?pOut,char?*gbBuffer);
            ????
            //?把Unicode?轉換成?GB2312
            ????static?void?UnicodeToGB2312(char*?pOut,?WCHAR*?pText);
            ????
            //?把UTF-8轉換成Unicode
            ????static?void?UTF_8ToUnicode(WCHAR*?pOut,char*?pText);
            }
            ;

            /*?UTF8Charset.cpp?*/
            #include?
            "UTF8Charset.h"

            CUTF8Charset::CUTF8Charset()
            {

            }


            CUTF8Charset::
            ~CUTF8Charset()
            {

            }


            void?CUTF8Charset::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);
            }


            void?CUTF8Charset::UnicodeToGB2312(char*?pOut,?WCHAR*?pText)
            {
            ????::WideCharToMultiByte(CP_ACP,NULL,pText,
            1,pOut,sizeof(WCHAR),NULL,NULL);
            }


            void?CUTF8Charset::Gb2312ToUnicode(WCHAR*?pOut,?char?*gbBuffer)
            {
            ????::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,
            2,pOut,1);
            }


            void?CUTF8Charset::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));
            }


            void?CUTF8Charset::GB2312ToUTF_8(char?*pOut,?char?*pText,?int?pLen)
            {
            ????
            char?buf[4];
            ????memset(buf,
            0,4);

            ????
            int?i?=?0;
            ????
            int?j?=?0;????
            ????
            while(i?<?pLen)
            ????
            {
            ????????
            //如果是英文直接復制就可以
            ????????if(?*(pText?+?i)?>=?0)
            ????????
            {
            ????????????pOut[j
            ++]?=?pText[i++];
            ????????}

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

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

            ????????????j?
            +=?3;
            ????????????i?
            +=?2;
            ????????}

            ????}

            ????pOut[j]?
            =?'\0';
            }


            void?CUTF8Charset::UTF_8ToGB2312(char?*pOut,?char?*pText,?int?pLen)
            {
            ????
            int?i?=0;
            ????
            int?j?=?0;
            ????
            char?Ctemp[3]?=?"";

            ????
            while(i?<?pLen)
            ????
            {
            ????????
            if(pText[i]?>?0)
            ????????
            {
            ????????????pOut[j
            ++]?=?pText[i++];????????????
            ????????}

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

            ????????????pOut[j]?
            =?Ctemp[0];
            ????????????pOut[j?
            +?1]?=?Ctemp[1];

            ????????????i?
            +=?3;????
            ????????????j?
            +=?2;???
            ????????}

            ????}

            ????pOut[j]?
            =?'\0';
            }


            void?CUTF8Charset::GB2312ToUTF_8(CString?&strOut,?char?*pText,?int?pLen)
            {????
            ????
            int?nBufferLen?=?pLen?/?2?*?3;????//按照全是漢字的情況預留空間
            ????char?*rst?=?new?char[nBufferLen];
            ????memset(rst,
            0,nBufferLen);

            ????GB2312ToUTF_8(rst,?pText,?pLen);

            ????strOut?
            =?rst;
            ????delete?[]?rst;
            ????rst?
            =?NULL;
            }


            void?CUTF8Charset::UTF_8ToGB2312(CString?&strOut,?char?*pText,?int?pLen)
            {
            ????
            char?*rst?=?new?char[pLen];
            ????memset(rst,
            0,pLen);

            ????UTF_8ToGB2312(rst,?pText,?pLen);

            ????strOut?
            =?rst;
            ????delete?[]?rst;
            ????rst?
            =?NULL;
            }
            posted on 2006-05-12 15:07 雙魚座的程序員 閱讀(679) 評論(0)  編輯 收藏 引用
            久久精品国产精品亚洲精品| 少妇久久久久久被弄到高潮| 久久久久亚洲AV无码麻豆| 伊人久久大香线蕉AV色婷婷色| 国产香蕉久久精品综合网| 7777精品久久久大香线蕉| 久久成人影院精品777| 青青热久久国产久精品| 99久久精品国产一区二区 | 久久这里有精品| 久久久无码精品亚洲日韩按摩| 99久久无码一区人妻| 亚洲国产精品无码久久久不卡| 久久成人永久免费播放| 久久久久亚洲AV成人片| 久久久久99这里有精品10| 亚洲欧美精品伊人久久| 久久久久女人精品毛片| 久久人人超碰精品CAOPOREN| 精品久久久久久中文字幕人妻最新 | 久久综合色区| 91久久成人免费| 久久久久久久97| 久久午夜夜伦鲁鲁片免费无码影视| 欧美久久综合性欧美| 欧洲人妻丰满av无码久久不卡| 久久夜色精品国产亚洲av| 精品多毛少妇人妻AV免费久久| 久久精品国产一区| 久久精品国产99国产精偷 | 国产精品99久久精品| 一本一本久久aa综合精品| 久久久久免费精品国产| 狠狠综合久久综合88亚洲| 久久综合色区| 热综合一本伊人久久精品| 久久久久这里只有精品| 午夜视频久久久久一区| 久久久久人妻一区二区三区 | 国产成人精品久久一区二区三区 | 亚洲国产精品婷婷久久|