Delphi 判断AnsiStr是否是UTF编码格式 IsUtf8Format
//判断是否是UTF编码格式 function IsUtf8Format(AnsiStr: AnsiString): Boolean; var I, iCount, chr: Integer; c: AnsiChar; nBytes: Integer; // UFT-8可用1-6个字节编码,ASCII用一个字节 bAllAscii: Boolean; // 如果全部都是ASCII, 说明不是UTF-8 begin Result := False; nBytes := 0; bAllAscii := True; iCount := Length(AnsiStr); for I := 1 to iCount do begin c := AnsiStr[I]; chr := Ord(c); // 判断是否ASCII编码,如果不是,说明有可能是UTF-8,ASCII用7位编码,但用一个字节存,最高位标记为0,o0xxxxxxx;中文ASCII编码可能最高位为1 if (chr and $80) <> 0 then bAllAscii := False; // 如果不是ASCII码,应该是多字节符,计算字节数 if nBytes = 0 then begin if chr > $80 then begin if (chr>=$fc) and (chr<=$fd) then // 1111 1100 and 1111 1101 nBytes := 6 else if chr>=$f8 then // 1111 1000 nBytes := 5 else if chr>=$f0 then // 1111 0000 nBytes := 4 else if chr>=$e0 then // 1110 0000 nBytes := 3 else if chr>=$c0 then // 1100 0000 nBytes := 2 else Exit; Dec(nBytes); end; end else // 多字节符的非首字节,应为 10xxxxxx begin if (chr and $c0) <> $80 then Exit; Dec(nBytes); end; end; // 违返规则 if nBytes > 0 then Exit; // 如果全部都是ASCII, 说明不是 UTF-8 if bAllAscii then Exit; Result := True; end;
C++
/* * 判断字符串内指定字符数是否为utf8 * 输入 * const char *str: 要检查的字符串 * long length: 要检查的字符串的长度 * int nWords: 要检查的最大字符数 */ BOOL CUtility::IsWordsUTF8(const char *str, long length, int nWords) { int i; int nBytes=0;//UFT8可用1-6个字节编码,ASCII用一个字节 unsigned char chr; BOOL bAllAscii=TRUE; //如果全部都是ASCII, 说明不是UTF-8 if ( -1 == nWords) { nWords = (int)length; } for(i=0;i<length;i++) { if (0 >= nWords) { return !bAllAscii; } chr= *(str+i); if( (chr&0x80) == 0 ) // 判断是否ASCII编码,如果不是,说明有可能是UTF-8,ASCII用7位编码,但用一个字节存,最高位标记为0,o0xxxxxxx;中文ASCII编码可能最高位为1 nWords--; else bAllAscii= FALSE; if(nBytes==0) //如果不是ASCII码,应该是多字节符,计算字节数 { if(chr>=0x80) { nWords--; if(chr>=0xFC&&chr<=0xFD)//1111 1100 1111 1101 nBytes=6; else if(chr>=0xF8)//1111 1000 nBytes=5; else if(chr>=0xF0)//1111 0000 nBytes=4; else if(chr>=0xE0)//1110 0000 nBytes=3; else if(chr>=0xC0)//1100 0000 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; }
创建时间:2021.04.09 更新时间: