close
判斷字串是否為utf8編碼

C++:
  1. //0000 0000-0000 007F - 0xxxxxxx  (ascii converts to 1 octet!)
  2. //0000 0080-0000 07FF - 110xxxxx 10xxxxxx    ( 2 octet format)
  3. //0000 0800-0000 FFFF - 1110xxxx 10xxxxxx 10xxxxxx (3 octet format)
  4. BOOL IsUTF8(const char *str)
  5. {
  6.     int   i;
  7.     BYTE cOctets;  // octets to go in this UTF-8 encoded character
  8.     BYTE chr;
  9.     BOOL  bAllAscii= TRUE;
  10.     long iLen = strlen(str);
  11.  
  12.     cOctets= 0;
  13.     for( i=0; i <iLen; i++ ) {
  14.  
  15.      chr = (BYTE)str[i];
  16.  
  17.      if( (chr & 0x80) != 0 ) bAllAscii= FALSE;
  18.  
  19.      if( cOctets == 0 ) {
  20.         if( chr>= 0x80 )  {
  21.             do  {
  22.                 chr <<= 1;
  23.                 cOctets++;
  24.             }
  25.             while( (chr & 0x80) != 0 );
  26.  
  27.             cOctets--;                       
  28.             if( cOctets == 0 ) return FALSE
  29.         }
  30.      }
  31.      else  {
  32.         if( (chr & 0xC0) != 0x80 )
  33.             return FALSE;
  34.  
  35.         cOctets--;                       
  36.      }
  37.     }
  38.  
  39.     if( cOctets> 0 )
  40.      return FALSE;
  41.  
  42.     if( bAllAscii )
  43.      return FALSE;
  44.  
  45.     return TRUE;
  46.  
  47.  }

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Bluelove1968 的頭像
    Bluelove1968

    藍色情懷

    Bluelove1968 發表在 痞客邦 留言(0) 人氣()