zoukankan      html  css  js  c++  java
  • 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;
     
    http://blog.csdn.net/missmecn/article/details/3007964
  • 相关阅读:
    正则表达式语法
    Linux之Shell脚本计算命令行的所有和
    Linux之匹配符
    Linux之ls命令
    Linux之Shell的算术运算
    Linux 之 shell 比较运算符
    tensorboard的使用
    模型训练减少随机性
    keras 下载预训练模型报错SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)
    Deep face recognition: a survey v4
  • 原文地址:https://www.cnblogs.com/findumars/p/5290040.html
Copyright © 2011-2022 走看看