首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

判断字符串是否UTF8编码,该怎么解决

2012-03-03 
判断字符串是否UTF8编码我现在需要判断一个字符串是否UTF8编码,在网上找到一个叫IsTextUTF8的函数,但是遇

判断字符串是否UTF8编码
我现在需要判断一个字符串是否UTF8编码,在网上找到一个叫IsTextUTF8的函数,但是遇到一个问题,当字符串为"偶也"时就无法正确判断了,请教大家是否有其他的方法判断一个字符串是否UTF8编码?该函数如下:

 BOOL IsUTF8String(char * str, ULONGLONG length)
 {
  int i = 0;
  DWORD nBytes = 0; // UFT8可用1-6个字节编码,ASCII用一个字节
  UCHAR chr = 0x0;
  BOOL bAllAscii = TRUE; // 如果全部都是ASCII, 说明不是UTF-8
  for(i = 0; i < length; i ++)
  {
  chr = *(str + i);
  if( (chr & 0x80) != 0 ) // 判断是否ASCII编码,如果不是,说明有可能是UTF-8,ASCII用7位编码,但用一个字节存,最高位标记为0,o0xxxxxxx
  bAllAscii = FALSE;
  if(nBytes == 0) //如果不是ASCII码,应该是多字节符,计算字节数
  {
  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 //多字节符的非首字节,应为 10xxxxxx
  {
  if( (chr&0xC0) != 0x80 )
  {
  return FALSE;
  }
  nBytes--;
  }
  }
  if( nBytes > 0 ) //违返规则
  {
  return FALSE;
  }
  if( bAllAscii ) //如果全部都是ASCII, 说明不是UTF-8
  {
  return FALSE;
  }
  return TRUE;
 }

[解决办法]
这个貌似没有100%准确的方法

热点排行
Bad Request.