delphi 判断时 因为没有 文件头标识 会被误认为是  ansi 编码 导致 乱码

解决方案 »

  1.   

    function UTF8FileBOM(const FileName: string): boolean;
    var
      txt: file;
      bytes: array[0..2] of byte;
      amt: integer;
    begin
      FileMode := fmOpenRead;
      AssignFile(txt, FileName);
      Reset(txt, 1);
      try
        BlockRead(txt, bytes, 3, amt);
        result := (amt=3) and (bytes[0] = $EF) and (bytes[1] = $BB) and (bytes[2] = $BF);
      finally    
        CloseFile(txt);
      end;
    end;
      

  2.   

    大哥  求你看清标题  是无bom 的  utf8没有 $EF $BB  $BF
      

  3.   

    先判断文件头,如果没有文件头,
    把文件读到字符串Str1中,然后用Utf8ToAnsi转换到Str2,如果Str2为空字符串,则是Ansi文本,直接用Str1
    如果Str2不为空,则用Str2,这时Str2已经解码
      

  4.   

    XE就把Utf8ToAnsi改成UTF8ToString即可
      

  5.   

    情况是这样的  txt 编码是 utf8无bom 的 str1 定义什么类型  ansistring   widestring   utf8string   ?
    UTF8ToString 只有乱码 没有空的 时候 小弟 不才 请给出 xe 示例代码  谢谢 
      

  6.   

    想做一个  ansi  unicode  utf8-有bom  utf8-无bom txt 编码 判断程序 有bom当然好说     ansi 与 utf8-无bom   怎么区分