• <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>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            判斷字符串是否UTF8編碼

            UTF8是以8bits1Bytes為編碼的最基本單位,當(dāng)然也可以有基于16bits32bits的形式,分別稱為UTF16UTF32,但目前用得不多,而UTF8則被廣泛應(yīng)用在文件儲存和網(wǎng)絡(luò)傳輸中。
              編碼原理
              先看這個(gè)模板:
              UCS-4 range (hex.) UTF-8 octet sequence (binary)
              0000 0000-0000 007F 0xxxxxxx
              0000 0080-0000 07FF 110xxxxx 10xxxxxx
              0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
              0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
              0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
              0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx
              編碼步驟:
              1) 首先確定需要多少個(gè)8bits(octets)
              2) 按照上述模板填充每個(gè)octets的高位bits
              3) 把字符的bits填充至x中,字符順序:低位高位,UTF8順序:最后一個(gè)octet的最末位x→第一個(gè)octet最高位x
              根據(jù)UTF8編碼,最多可由6個(gè)字節(jié)組成,所以UTF81-6字節(jié)編碼組成
              C++代碼如下:
              int IsTextUTF8(char* str,ULONGLONG length)
              {
              int i;
              DWORD nBytes=0;//UFT8可用1-6個(gè)字節(jié)編碼,ASCII用一個(gè)字節(jié)
              UCHAR chr;
              BOOL bAllAscii=TRUE; //如果全部都是ASCII, 說明不是UTF-8
              for(i=0;i<length;i++)
              {
              chr= *(str+i);
              if( (chr&0x80) != 0 ) // 判斷是否ASCII編碼,如果不是,說明有可能是UTF-8,ASCII7位編碼,但用一個(gè)字節(jié)存,最高位標(biāo)記為0,o0xxxxxxx
              bAllAscii= FALSE;
              if(nBytes==0) //如果不是ASCII,應(yīng)該是多字節(jié)符,計(jì)算字節(jié)數(shù)
              {
              if(chr>=0x80)
              {
              if(chr>=0xFC&&chr<=0xFD)
              nBytes=6;
              else if(chr>=0xF8)
              nBytes=5;
              else if(chr>=0xF0)
              nBytes=4;
              else if(chr>=0xE0)
              nBytes=3;
              else if(chr>=0xC0)
              nBytes=2;
              else
              {
              return FALSE;
              }
              nBytes--;
              }
              }
              else //多字節(jié)符的非首字節(jié),應(yīng)為 10xxxxxx
              {
              if( (chr&0xC0) != 0x80 )
              {
              return FALSE;
              }
              nBytes--;
              }
              }
              if( nBytes > 0 ) //違返規(guī)則
              {
              return FALSE;
              }
              if( bAllAscii ) //如果全部都是ASCII, 說明不是UTF-8
              {
              return FALSE;
              }
              return TRUE;
              }

             

            posted on 2011-08-27 15:20 肥仔 閱讀(4246) 評論(3)  編輯 收藏 引用 所屬分類: 字符編碼

            評論

            # re: 判斷字符串是否UTF8編碼  回復(fù)  更多評論   

            這個(gè)很有用
            2011-08-28 08:25 | 天下

            # re: 判斷字符串是否UTF8編碼  回復(fù)  更多評論   

            試一下輸入gbk碼的“聯(lián)通”二字,發(fā)現(xiàn)判斷的結(jié)果是utf-8編碼,所以該判斷函數(shù)存在問題
            2015-11-02 16:52 | liuyuananfang

            # re: 判斷字符串是否UTF8編碼  回復(fù)  更多評論   

            有問題,輸入 GBK的 “藍(lán)色” ,判斷的結(jié)果是utf-8編碼。
            2016-01-09 14:55 | ddd
            久久综合九色欧美综合狠狠 | 久久精品无码一区二区日韩AV| 国产麻豆精品久久一二三| 狠狠色狠狠色综合久久| 奇米影视7777久久精品人人爽| 狠狠色丁香久久婷婷综合_中 | 精品久久久久久国产| 久久精品国产亚洲av高清漫画 | 久久精品国产91久久综合麻豆自制 | 久久精品国产福利国产琪琪 | 亚洲一本综合久久| 久久精品无码一区二区WWW| 久久91精品国产91久久户| 亚洲欧美成人久久综合中文网 | 久久无码一区二区三区少妇| 久久久久高潮毛片免费全部播放| 国产ww久久久久久久久久| 久久精品国产精品亚洲精品| 精品久久久久久国产| 午夜精品久久久久久| 成人午夜精品久久久久久久小说| 久久精品女人天堂AV麻| 国产精品福利一区二区久久| 热综合一本伊人久久精品 | 日韩一区二区三区视频久久| 99久久久国产精品免费无卡顿| 亚洲国产精品无码久久青草| 免费观看成人久久网免费观看| 亚洲精品无码久久久影院相关影片| 99久久国产亚洲高清观看2024 | 久久夜色撩人精品国产| 久久精品99久久香蕉国产色戒| 久久精品国产99久久久古代| 亚洲精品99久久久久中文字幕| 99久久精品无码一区二区毛片| 99久久国产综合精品麻豆| 久久精品国产久精国产思思| 久久精品国产亚洲77777| 久久国产成人精品麻豆| 久久国产精品无码一区二区三区| 亚洲综合日韩久久成人AV|