如何识别字符串中包含utf-8编码字符?

解决方案 »

  1.   

    http://wenwen.soso.com/z/q165867807.htm
    转换方法
      

  2.   

    如果只是判断的话 复制给widestring变量,循环变量的每个元素,复制给string变量,看string变量长度是不是1,是则有utf-8字符
      

  3.   

    看不懂楼上的意思。string变量长度是不是1这句话是什么意思?
      

  4.   

    widestring的每个元素是widechar 赋值给string长度就有可能是1 或 2了
      

  5.   

    UNICODE:
    http://baike.soso.com/ShowLemma.e?sp=l291611&ch=w.search.baike编码指不同国家的语言在计算机中的一种存储和解释规范 ANSI与ASCII 
    n最初,Internet上只有一种字符集——ANSI的ASCII字符集(American Standard Code for Information Interchange, “美国信息交换标准码),它使用7 bits来表示一个字符,总共表示128个字符,后来IBM公司在此基础上进行了扩展,用8bit来表示一个字符,总共可以表示256个字符,充分利用了一个字节所能表达的最大信息 nANSI字符集:ASCII字符集,以及由此派生并兼容的字符集,如:GB2312,正式的名称为MBCS(Multi-Byte Chactacter System,多字节字符系统),通常也称为ANSI字符集。 UNICODE与UTF8,UTF16 n由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,产生了Unicode字符集,它固定使用16 bits(两个字节)来表示一个字符,共可以表示65536个字符 n标准的Unicode称为UTF-16(UTF:UCS Transformation Format )。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。(Unicode字符集有多种编码形式) 例如“连通”两个字的Unicode标准编码UTF-16 (big endian)为:DE 8F 1A 90 而其UTF-8编码为:E8 BF 9E E9 80 9A n当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件一般采用三种方式来决定文本的字符集和编码: 检测文件头标识,提示用户选择,根据一定的规则猜测 最标准的途径是检测文本最开头的几个字节,开头字节 Charset/encoding,如下表:
    EF BB BF UTF-8 
    FE FF UTF-16/UCS-2, little endian FF FE UTF-16/UCS-2, big endian 
    FF FE 00 00 UTF-32/UCS-4, little endian. 00 00 FE FF UTF-32/UCS-4, big-endian.
      

  6.   

    应该没有办法同样6个字节,你可以认为是2个utf8编码的汉字,也可以认为是3个标准unicode 的汉字 ,应该区别不开,如果是汉字和中文,那倒是可以区分开。。
    说道采集网页,同一个网页应该不能部分采用utf8编码,而部分不采用utf8编码吧,所以通过文件头应该还是可以的吧。。
      

  7.   

    网页的文件头?“<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />”这句吗?
    目前问题是:有的网页明明这样标示了,可实际不是UTF-8编码的。这个怎么办?
      

  8.   

    可以简单测试一下
    Function HasNotUtf8(sData:WideString):Boolean;
    Var i:integer;tmp:String;
    Begin
      Result:=true;
      For i:=1 To Length(sData) Do
      Begin
        tmp:=sData[i];
        if(Length(tmp)>1)Then Exit;    //找到非Utf8编码返回true;
      End;
      Result:=False;                   //全是Utf8返回false
    End;
      

  9.   

    你这样的话,如果字符串中含有中文字符也变成了UTF8编码了
      

  10.   

    字符串中含中文返回trueUTF8是返回false
      

  11.   

    我试了,一种字符串是中英文混合的,一种是UTF8乱码和英文混合的,按照你的办法,区分不出来的。