Delphi 判断并删除utf8文本文件中的前三个字节BOM


{-------------------------------------------------------------------------------
过程名:    DelBomFromUtf8File 判断并删除utf8文本文件中的前三个字节BOM
参数:      filename:string   1.文件名
返回值:    boolean   是否删除

-------------------------------------------------------------------------------}
function TReplaceString.DelBomFromUtf8File(filename:string):boolean;
const
  UTF8_FLAG=$EFBB;
var
  fsRead,fsWrite:TFileStream;
  w:word;
  b:byte;
  filename_tmp:string;
  len:integer;
function WordLoHiExchange(w: Word): Word; register;
asm
   XCHG AL, AH
end;
begin
  result:=false;
  if(fileexists(filename)=false)then exit;
  fsRead:=TFileStream.Create(filename, fmOpenRead or fmShareDenyNone); // or fmOpenWrite
try
  fsRead.Seek(0, soFromBeginning);
  fsRead.Read(w,2);
  w:= WordLoHiExchange(w);
  if w=UTF8_FLAG then
  begin
    fsRead.Read(b,1);
    len:=fsRead.Size-fsRead.Position;
    filename_tmp:=filename+'tmp';
    fsWrite:=TFileStream.Create(filename_tmp, fmCreate);
    fsWrite.CopyFrom(fsRead, len);
    fsWrite.Free;
    result:=true;
  end;
finally
  fsRead.Free;
  if(result)then
  begin
    deletefile(filename);
    movefile(pchar(filename_tmp),pchar(filename));
  end;
end;


猜你喜欢

转载自blog.csdn.net/byc6352/article/details/105322219
今日推荐