• <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麻豆小说| 2021久久精品国产99国产精品| 久久精品a亚洲国产v高清不卡| 日本三级久久网| 久久亚洲精品国产精品婷婷 | 国产成人AV综合久久| 久久久久亚洲精品中文字幕| 久久九九久精品国产免费直播| 俺来也俺去啦久久综合网| 久久性精品| 办公室久久精品| 午夜久久久久久禁播电影| 久久99精品久久久久久9蜜桃| 婷婷五月深深久久精品| 久久精品中文字幕一区| 国产精品久久久亚洲| 久久笫一福利免费导航 | 久久九九亚洲精品| 久久精品国产男包| 无码乱码观看精品久久| 狠狠色丁香久久综合五月| 99久久精品免费看国产一区二区三区| 国产精品热久久毛片| 国产精品久久久久国产A级| 无码人妻久久一区二区三区免费丨 | 国产成人久久精品二区三区| 午夜人妻久久久久久久久| 色播久久人人爽人人爽人人片AV| 久久久久国产日韩精品网站 | 一本一本久久a久久精品综合麻豆| 99久久国产亚洲高清观看2024| 色8久久人人97超碰香蕉987| 精品久久久久久国产| 久久精品国产日本波多野结衣| 久久夜色精品国产亚洲| 久久无码AV中文出轨人妻| 久久中文精品无码中文字幕 | 欧美一区二区三区久久综| 久久久国产乱子伦精品作者| 日韩精品久久久久久免费|