加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi读写UTF-8、Unicode格式文本文件

发布时间:2020-12-15 10:00:05 所属栏目:大数据 来源:网络整理
导读:// 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 ??? i

// 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;
???
??? 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;
? 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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读