如何判断 没有bom头的 utf-8 文本文件?

chinawcs 2012-11-09 08:46:34
delphi 判断时 因为没有 文件头标识 会被误认为是 ansi 编码 导致 乱码

...全文
790 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝色光芒 2012-11-25
  • 打赏
  • 举报
回复
XE就把Utf8ToAnsi改成UTF8ToString即可
chinawcs 2012-11-25
  • 打赏
  • 举报
回复
我用的 是 xe
chinawcs 2012-11-25
  • 打赏
  • 举报
回复
想做一个 ansi unicode utf8-有bom utf8-无bom txt 编码 判断程序 有bom当然好说 ansi 与 utf8-无bom 怎么区分
chinawcs 2012-11-25
  • 打赏
  • 举报
回复
引用 3 楼 kiboisme 的回复:
先判断文件头,如果没有文件头, 把文件读到字符串Str1中,然后用Utf8ToAnsi转换到Str2,如果Str2为空字符串,则是Ansi文本,直接用Str1 如果Str2不为空,则用Str2,这时Str2已经解码
情况是这样的 txt 编码是 utf8无bom 的 str1 定义什么类型 ansistring widestring utf8string ? UTF8ToString 只有乱码 没有空的 时候 小弟 不才 请给出 xe 示例代码 谢谢
蓝色光芒 2012-11-09
  • 打赏
  • 举报
回复
先判断文件头,如果没有文件头, 把文件读到字符串Str1中,然后用Utf8ToAnsi转换到Str2,如果Str2为空字符串,则是Ansi文本,直接用Str1 如果Str2不为空,则用Str2,这时Str2已经解码
chinawcs 2012-11-09
  • 打赏
  • 举报
回复
大哥 求你看清标题 是无bom 的 utf8 没有 $EF $BB $BF
JPEXE 2012-11-09
  • 打赏
  • 举报
回复
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;

5,926

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧