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下面编译安装ffmpeg
    Fidder简单使用方法(HTTPS抓取和url替换)
    关于一下个阶段的计划
    JAVA的随机的字符串的封装(基本上够用了)
    Shell Script中的间接变量引用
    进程概念
    int main(int argc, char *argv[])的解读
    存储数组数据到SharedPreferences
    C语言中的基本声明
    C中关于指针数组的用法
  • 原文地址:https://www.cnblogs.com/findumars/p/5290040.html
Copyright © 2011-2022 走看看