EvoTalk

13 二月, 2006

判斷字串是否為utf8編碼

Posted by: asd In: C++| Code Snippet| 程式設計 ()

參考「自动辨别文本是不是utf-8的c#程序」 改成C code

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. }

Tags:

Releated Posts



No Responses to "判斷字串是否為utf8編碼"

Comment Form


  • BK: 大於和小於在今日更廣泛地使用於標籤上,故在此補充該英文用法: : angle bracket []: square bracket
  • luh1688: 非常實用且謝謝!~
  • asd: 好的,不過很久沒修改了,不知道能不能動 寄到您的yahoo信箱
  • LIANG: nice post, thank you
  • Justmaker: 您好,請問可以跟你要source嗎?我最近有在看股票,想要enhance您的小工具,不知是否可以開放?

Category