1,183
社区成员
发帖
与我相关
我的任务
分享
var f: TextFile;
begin
AssignFile(f, 'test.txt');
Rewrite(f);
write(f, #$EF+#$BB+#$BF); // UTF-8 BOM,关键就是写入这个UTF-8的BOM, BOM 是 Bype Order Mark 的缩写。
writeln(f, UTF8Encode('中文'));
CloseFile(f);
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;
var
ini : TMemIniFile;
sBuf , sName : String;
FM : TFileStream;
bIsUTF : Boolean;
begin
SetLength(sName, MAX_PATH);
FillChar(Pointer(sName)^ , MAX_PATH, 0);
Windows.GetTempPath(MAX_PATH, Pointer(sName));
sName := Trim(sName) + 'temp_1.0.ini';
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;
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 := TMemIniFile.Create(sName);
ini.WriteString('sys', 'Name' , 'V汉字文才能体现UTF8lue');
ini.UpdateFile;
ini.Free;
FM := TFileStream.Create(sName, fmOpenRead);
SetLength(sBuf, FM.Size);
FM.Read(Pointer(sBuf)^, FM.Size);
FM.Free;
DeleteFile(sName);
if bIsUTF then begin
sBuf := UTF8Encode(sBuf);
sBuf := #$EF#$BB#$BF + sBuf;
end;
FM := TFileStream.Create('e:\d.ini' , fmCreate);
FM.WriteBuffer(Pointer(sBuf)^ , Length(sBuf));
FM.Free;
end;