微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐