// 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;
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.Write(S[1],Length(S));
MemStream.Position := 0;
MemStream.SaveToFile(FileName);
finally
MemStream.Free;
end;
end;
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);
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;
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;
WStr := WideString(S);
MemStream.Write(WStr[1],Length(WStr)*2);
MemStream.Position := 0;
MemStream.SaveToFile(FileName);
finally
MemStream.Free;
end;
end;
try
if WriteHeader then
begin
HeaderStr := #$FF#$FE;
MemStream.Write(HeaderStr[1],2);
end;
WStr := WideString(S);
MemStream.Write(WStr[1],Length(WStr)*2);
MemStream.Position := 0;
MemStream.SaveToFile(FileName);
finally
MemStream.Free;
end;
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;
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);
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。