读写INI文件UTF8格式

本文介绍了一种使用Delphi读取和修改UTF-8编码的INI文件的方法,包括文件路径获取、文件内容读取与编码转换、临时文件创建与使用、INI文件内容修改及保存等步骤。
var
  ini : TMemIniFile;
  sBuf , sName : String;
  FM : TFileStream;
  bIsUTF : Boolean;
begin
  //这一段 获取一个临时文件路径和名称,存到变量sName中
  SetLength(sName, MAX_PATH);
  FillChar(Pointer(sName)^ , MAX_PATH, 0);
  Windows.GetTempPath(MAX_PATH, Pointer(sName));
  sName := Trim(sName) + 'temp_1.0.ini';
 
  //这一段读取要修改的ini文件,存到变量sBuf中
  FM := TFileStream.Create('e:\d.ini' , fmOpenRead);
  if FM.Size=0 then begin
    FM.Free;
    exit;
  end;
  SetLength(sBuf, FM.Size);
  FM.Read(Pointer(sBuf)^, FM.Size);
  FM.Free;
 
  //判断是否是UTF-8字符集,如果是转换成String字符(Delphi7默认为Ansi字符集)
  bIsUTF := Copy(sBuf , 1 3) = #$EF#$BB#$BF;
  if bIsUTF then begin
    Delete(sBuf , 1 3);
    sBuf := UTF8Decode(sBuf);
  end;
 
  //把转换好的字符集保存到临时文件中
  FM := TFileStream.Create(sName, fmCreate);
  FM.WriteBuffer(Pointer(sBuf)^ , Length(sBuf));
  FM.Free;
 
  //修改ini文件的内容***********************
  ini := TMemIniFile.Create(sName);
  ini.WriteString('sys''Name' 'V汉字文才能体现UTF8lue');
  ini.UpdateFile;  //保存到文件,即临时文件
  ini.Free;
 
  //读取已经修改并保存的ini文件到字符串sBuf中
  FM := TFileStream.Create(sName, fmOpenRead);
  SetLength(sBuf, FM.Size);
  FM.Read(Pointer(sBuf)^, FM.Size);
  FM.Free;
  DeleteFile(sName);  //删除临时文件
 
  //转换为UTF-8字符集
  if bIsUTF then begin
    sBuf := UTF8Encode(sBuf);
    sBuf := #$EF#$BB#$BF + sBuf;  //加上BOM
  end;
 
  //把转换好的字符集,直接覆盖保存到待修改的ini文件中
  FM := TFileStream.Create('e:\d.ini' , fmCreate);
  FM.WriteBuffer(Pointer(sBuf)^ , Length(sBuf));
  FM.Free;
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值