// UTF-8文件写入函数 procedure SaveUTFFile(const FileName: string; S: string; WriteHeader: Boolean = True); var MemStream: TMemoryStream; HeaderStr: String; begin if S = '' then Exit;
MemStream := TMemoryStream.Create; try if WriteHeader then begin HeaderStr:=#$EF#$BB#$BF; MemStream.Write(HeaderStr[1], 3); end; S := AnsiToUtf8(S); MemStream.Write(S[1], Length(S)); MemStream.Position := 0; MemStream.SaveToFile(FileName); finally MemStream.Free; end; end;
// UtF-8文件读取函数 function LoadUTFFile(const FileName: string; ReadHeader: Boolean = True): string; var MemStream: TMemoryStream; S, HeaderStr:string; begin Result:=''; if not FileExists(FileName) then Exit; MemStream := TMemoryStream.Create; try MemStream.LoadFromFile(FileName); if ReadHeader then begin SetLength(HeaderStr, 3); MemStream.Read(HeaderStr[1], 3); if HeaderStr = #$EF#$BB#$BF then begin SetLength(S, MemStream.Size - 3); MemStream.Read(S[1], MemStream.Size - 3); end; end else begin SetLength(S, MemStream.Size); MemStream.Read(S[1], MemStream.Size); end;
Result := Utf8ToAnsi(S); finally MemStream.Free; end; end;
// Unicode文件写入函数 procedure SaveUnicodeFile(const FileName:string; const S: string; WriteHeader: Boolean = True); var MemStream: TMemoryStream; HeaderStr: string; WStr: WideString; begin if S = '' then exit; MemStream := TMemoryStream.Create; try if WriteHeader then begin HeaderStr := #$FF#$FE; MemStream.Write(HeaderStr[1], 2); end;
// Unicode文件读取函数 function LoadUnicodeFile(const FileName: string; ReadHeader: Boolean = True): string; var MemStream: TMemoryStream; FlagStr: String; WStr: WideString; begin Result := ''; if not FileExists(FileName) then Exit;MemStream := TMemoryStream.Create; try MemStream.LoadFromFile(FileName); if ReadHeader then begin SetLength(FlagStr, 2); MemStream.Read(FlagStr[1], 2);
if FlagStr = #$FF#$FE then begin SetLength(WStr, (MemStream.Size-2) div 2); MemStream.Read(WStr[1], MemStream.Size - 2); end; end else begin SetLength(WStr, MemStream.Size div 2); MemStream.Read(WStr[1], MemStream.Size); end;
Result := AnsiString(WStr); finally MemStream.Free; end; end;