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;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值