青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

  最近在用VC++開發一個小工具,平時用慣了.NET,用起VC++最郁悶的就是字符串處理。當然最最讓人難于琢磨的就是字符集,編碼之間的轉換。通過這幾天的研究,終于明白了Unicode和UTF-8之間編碼的區別。Unicode是一個字符集,而UTF-8是Unicode的其中一種,Unicode是定長的都為雙字節,而UTF-8是可變的,對于漢字來說Unicode占有的字節比UTF-8占用的字節少1個字節。Unicode為雙字節,而UTF-8中漢字占三個字節。
                        網魂小兵 http://xdotnet.cnblogs.com
    UTF-8編碼字符理論上可以最多到6個字節長,然而16位BMP(Basic Multilingual Plane)字符最多只用到3字節長。下面看一下UTF-8編碼表:

        U-00000000 - U-0000007F: 0xxxxxxx
        U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
        U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
        U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
        U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
        U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

    xxx 的位置由字符編碼數的二進制表示的位填入, 越靠右的 x 具有越少的特殊意義,只用最短的那個足夠表達一個字符編碼數的多字節串。 注意在多字節串中, 第一個字節的開頭"1"的數目就是整個串中字節的數目。而第一行中以0開頭,是為了兼容ASCII編碼,為一個字節,第二行就為雙字節字符串,第三行為3字節,如漢字就屬于這種,以此類推。(個人認為:其實我們可以簡單的把前面的1的個數看成字節數)
                         網魂小兵 http://xdotnet.cnblogs.com
    為了要將Unicode轉換為UTF-8,當然要知道他們的區別到底在什么地方。下面來看一下,在Unicode中的編碼是怎樣轉換成UTF-8的,在UTF-8中,如果一個字符的字節小于0x80(128)則為ASCII字符,占一個字節,可以不用轉換,因為UTF-8兼容ASCII編碼。假如在Unicode中漢字“你”的編碼為“u4F60”,把它轉換為二進制為100111101100000,然后按照UTF-8的方法進行轉換。可以將Unicode二進制從地位往高位取出二進制數字,每次取6位,如上述的二進制就可以分別取出為如下所示的格式,前面按格式填補,不足8位用0填補。

      
           unicode:  100111101100000                  4F60

           utf-8:    11100100,10111101,10100000       E4BDA0


    從上面就可以很直觀的看出Unicode到UTF-8之間的轉換,當然知道了UTF-8的格式后,就可以進行逆運算,就是按照格式把它在二進制中的相應位置上取出,然后在轉換就是所得到的Unicode字符了(這個運算可以通過“位移”來完成)。
                      網魂小兵 http://xdotnet.cnblogs.com
    如上述的“你”的轉換,由于其值大于0x800小于0x10000,因此可以判斷為三字節存儲,則最高位需要向右移“12”位再根據三字節格式的最高位為11100000(0xE0)求或(|)就可以得到最高位的值了。同理第二位則是右移“6”位,則還剩下最高位和第二位的二進制值,可以通過與111111(0x3F)求按位于(&)操作,再和11000000(0x80)求或(|)。第三位就不用移位了,只要直接取最后六位(與111111(ox3F)取&),在與11000000(0x80)求或(|)。OK了,轉換成功!在VC++中的代碼如下所示(Unicode到UTF-8的轉換)。

        1 const wchar_t pUnicode = L"你";
        2 char utf8[3+1];
        3 memset(utf8,0,4);
        4 utf8[0] = 0xE0|(pUnicode>>12);
        5 utf8[1] = 0x80|((pUnicode>>6)&0x3F);
        6 utf8[2] = 0x80|(pUnicode&0x3F);
        7 utf8[3] = "\0";
        8 //char[4]就是UTF-8的字符“你”了。

    當然在UTF-8到Unicode的轉換也是通過移位等來完成的,就是把UTF-8那些格式相應的位置的二進制數給揪出來。在上述例子中“你”為三個字節,因此要每個字節進行處理,有高位到低位進行處理。在UTF-8中“你”為11100100,10111101,10100000。從高位起即第一個字節11100100就是把其中的"0100"給取出來,這個很簡單只要和11111(0x1F)取與(&),由三字節可以得知最到位肯定位于12位之前,因為每次取六位。所以還要將得到的結果左移12位,最高位也就這樣完成了0100,000000,000000。而第二位則是要把“111101”給取出來,則只需將第二字節10111101和111111(0x3F)取與(&)。在將所得到的結果左移6位與最高字節所得的結果取或(|),第二位就這樣完成了,得到的結果為0100,111101,000000。以此類推最后一位直接與111111(0x3F)取與(&),再與前面所得的結果取或(|)即可得到結果0100,111101,100000。OK,轉換成功!在VC++中的代碼如下所示(UTF-8到Unicode的轉換)。

    1 //UTF-8格式的字符串
    2 const char* utf8 = "你";
    3 wchar_t unicode;
    4 unicode = (utf8[0] & 0x1F) << 12;
    5 unicode |= (utf8[1] & 0x3F) << 6;
    6 unicode |= (utf8[2] & 0x3F);
    7 //unicode is ok!
                            網魂小兵 http://xdotnet.cnblogs.com
    當然在編程過程中不可能只轉換一個字符,這里需要注意的是字符的長度一定要算清楚,不然會帶來...以上就是我這幾天研究的結果,至于Unicode的轉換為GB2312在MFC中Windows有自帶的API(WideCharToMultiByte)可以轉換。這樣也就能夠將UTF-8格式轉換為GB2312了,這里就不再贅述,如果大家有更好的方法希望指教。
Posted on 2011-11-20 13:52 鄭興鋒 閱讀(372) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区三区四区视频| 国产精品国产福利国产秒拍| 亚洲国产一区在线观看| 欧美一激情一区二区三区| 一区二区三区免费在线观看| 正在播放亚洲| 午夜欧美大片免费观看| 欧美在线二区| 美女国产精品| 亚洲国产精品久久久久婷婷老年| 91久久国产综合久久蜜月精品| 一本色道久久88亚洲综合88| 亚洲免费伊人电影在线观看av| 欧美一区二区成人6969| 久久视频一区二区| 欧美日韩成人一区| 国产午夜精品福利| 最近中文字幕日韩精品 | 99亚洲视频| 欧美一区日本一区韩国一区| 蜜臀99久久精品久久久久久软件 | 亚洲欧美日韩网| 久久久久久久高潮| 欧美日韩一区二区三区在线| 国产自产在线视频一区| 亚洲三级视频| 久久久99久久精品女同性| 免费美女久久99| 亚洲一区二区视频在线观看| 欧美成人午夜激情| 国产一区二区三区在线观看免费 | 国内综合精品午夜久久资源| 夜夜爽av福利精品导航 | 亚洲靠逼com| 久久久精彩视频| 亚洲免费黄色| 美日韩丰满少妇在线观看| 国产精品无码永久免费888| 亚洲国产婷婷综合在线精品 | 欧美大片一区二区| 亚洲欧美日本视频在线观看| 亚洲欧美日韩综合| 亚洲韩国精品一区| 久久精品国产2020观看福利| 亚洲精品美女在线观看| 久久亚洲精品一区二区| 国产精品v欧美精品∨日韩| 亚洲精品国产精品国自产观看| 新67194成人永久网站| 亚洲精品一线二线三线无人区| 久久精品亚洲一区二区三区浴池| 国产精品日产欧美久久久久| 亚洲一区二区精品在线| 亚洲国产精品女人久久久| 久久久福利视频| 国产亚洲视频在线观看| 久久se精品一区二区| 亚洲欧美一级二级三级| 国产精品一区二区你懂得 | 久久久国产成人精品| 亚洲一二三区在线观看| 国产精品视频xxxx| 欧美一区二区三区免费视| 亚洲一区二区在线免费观看| 国产精品成人一区二区| 亚洲欧美第一页| 亚洲综合第一| 国产欧美精品久久| 久久精品91久久香蕉加勒比| 久久av一区二区三区漫画| 极品中文字幕一区| 亚洲国产精品成人综合色在线婷婷| 欧美成人精品| 亚洲亚洲精品三区日韩精品在线视频| 亚洲黄色影院| 国产精品久久久久aaaa九色| 久久er精品视频| 免费人成网站在线观看欧美高清| 亚洲欧洲精品一区二区| 亚洲久色影视| 国产午夜精品视频免费不卡69堂| 久久久久久噜噜噜久久久精品| 久久精品久久综合| 91久久精品www人人做人人爽| 亚洲人体偷拍| 国产伦精品一区二区三区四区免费 | 欧美一区二区三区免费观看视频| 国产亚洲欧美激情| 欧美成人免费在线| 欧美午夜精品理论片a级按摩| 欧美一区二区精品久久911| 欧美一级成年大片在线观看| 亚洲黄页一区| 亚洲一区二区成人在线观看| 好看的av在线不卡观看| 亚洲国产一区二区三区a毛片 | 亚洲电影激情视频网站| 欧美日韩精品一本二本三本| 新67194成人永久网站| 狂野欧美激情性xxxx| 亚洲一区二区三| 久久九九热re6这里有精品| 日韩亚洲视频在线| 久久国产精品免费一区| 亚洲美女免费视频| 久久成人久久爱| 在线视频欧美精品| 久久一区亚洲| 久久久国产精彩视频美女艺术照福利 | 亚洲国产婷婷香蕉久久久久久| 国产精品色婷婷| 欧美国产丝袜视频| 国产精品自在线| 亚洲欧洲精品一区二区| 激情久久久久| 欧美一区二区三区日韩视频| 亚洲视频免费在线观看| 嫩草影视亚洲| 欧美aⅴ一区二区三区视频| 国产欧美日韩在线视频| 一区二区三区视频在线 | 国内视频精品| 亚洲一区国产视频| 99re热精品| 久久夜色精品国产欧美乱| 欧美中文在线观看| 国产精品精品视频| 一本久久综合亚洲鲁鲁| 99re66热这里只有精品3直播| 久久人人97超碰国产公开结果| 欧美一区二区视频在线观看| 国产精品www网站| 日韩午夜精品视频| 一本一本久久a久久精品综合麻豆| 噜噜噜在线观看免费视频日韩| 久久久噜噜噜久久人人看| 国产欧美日韩精品在线| 亚洲伊人一本大道中文字幕| 亚洲欧美中文日韩v在线观看| 欧美精品一区二区三区久久久竹菊 | 欧美国产亚洲另类动漫| 欧美成人综合| 最新成人在线| 欧美紧缚bdsm在线视频| 亚洲国产精品久久91精品| 亚洲国产精品传媒在线观看| 久久综合电影一区| 欧美国产日韩一区二区三区| 亚洲欧洲一区二区三区久久| 亚洲大胆美女视频| 美日韩精品免费| 亚洲高清色综合| 亚洲美女在线视频| 欧美日本国产精品| 亚洲视频在线视频| 国产精品久久久久久久7电影 | 国产伦精品一区二区三区免费迷| 亚洲欧美中文日韩在线| 久久久久久久久一区二区| 伊人激情综合| 欧美区高清在线| 午夜精品电影| 欧美国产日产韩国视频| 一本大道久久a久久综合婷婷 | 亚洲最新色图| 国产精品日韩一区| 久久成人精品电影| 亚洲精品久久久久| 欧美一区二区三区四区高清| 亚洲福利国产| 国产精品久久久久久久久婷婷 | 国产精品99免费看 | 国产精品久久网| 久久精品人人| 亚洲精品日韩在线| 久久国产一区二区| 亚洲精品国精品久久99热一| 国产精品一区免费视频| 你懂的一区二区| 欧美一区二区视频观看视频| 亚洲人成网站色ww在线| 久久精品卡一| 正在播放亚洲| 亚洲国产精品久久人人爱蜜臀 | 亚洲欧美日韩视频一区| 亚洲电影av在线| 欧美少妇一区| 美女主播精品视频一二三四| 亚洲一区二区网站| 亚洲精品乱码久久久久久日本蜜臀| 午夜精品99久久免费| 亚洲人成亚洲人成在线观看| 国产精品网站在线播放| 欧美日韩国产va另类| 久久久久久日产精品| 亚洲午夜影视影院在线观看| 91久久精品美女| 欧美jjzz| 猫咪成人在线观看| 欧美在线视频播放|