• <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 雙魚座的程序員 閱讀(676) 評論(0)  編輯 收藏 引用
            品成人欧美大片久久国产欧美...| 欧美日韩精品久久久免费观看| 久久99精品国产99久久| 亚洲午夜无码久久久久| 久久香蕉超碰97国产精品| 国产AV影片久久久久久| 日韩人妻无码一区二区三区久久99| 国产成人无码精品久久久性色| 久久精品国产网红主播| 久久www免费人成精品香蕉| 偷偷做久久久久网站| 一本大道加勒比久久综合| 亚洲国产精品嫩草影院久久| 日日噜噜夜夜狠狠久久丁香五月 | 久久综合狠狠综合久久综合88| 久久婷婷五月综合97色直播| 国产激情久久久久影院小草| 91精品国产91久久综合| 99久久婷婷国产综合精品草原| 青青草原综合久久| 模特私拍国产精品久久| 久久国产精品免费一区二区三区| 综合网日日天干夜夜久久| 一本综合久久国产二区| 91精品国产91热久久久久福利| 国产成人精品久久| 久久这里只精品99re66| 久久99精品久久久久久噜噜| 99久久免费国产特黄| 久久久久亚洲AV无码麻豆| 久久婷婷五月综合成人D啪| 国产精品久久久香蕉| 一本色道久久综合| 天堂无码久久综合东京热| 九九久久精品国产| 久久国产成人午夜aⅴ影院| 伊人热人久久中文字幕| 欧美亚洲另类久久综合| 国产高潮国产高潮久久久91 | 久久久久无码中| 久久久WWW免费人成精品|