我知道notepad保存文件时是有编码选项的,memo如何做到呢。谢谢。

解决方案 »

  1.   

    var
    S:UTF8String;
    F:TextFile;
    begin
    S:=UTF8Encode(Memo1.Text);
    AssignFile(F, 'C:\test.txt');
    Rewrite(F);
    Write(F,#$EF+#$BB+#$BF); //UTF8标记
    Write(F,S);
    CloseFile(F);
    end;
      

  2.   

    //Unicode存、取
    procedure TForm1.Button1Click(Sender: TObject);
    var
      S: string;
      W: WideString;
    begin
      if Memo1.Text = '' then Exit;  //存
      with TMemoryStream.Create do try
        S := #$FF#$FE;
        Write(S[1], Length(S));
        W := Memo1.Text;
        Write(W[1], Length(W) * SizeOf(WideChar));
        Position := 0;
        SaveToFile('c:\temp\temp.txt');
      finally
        Free;
      end;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    var
      S: string;
      W: WideString;
    begin  //取
      if not FileExists('c:\temp\temp.txt') then Exit;
      with TMemoryStream.Create do try
        LoadFromFile('c:\temp\temp.txt');
        if Size < 4 then Exit;
        SetLength(S, 2);
        Read(S[1], Length(S));
        if Copy(S, 1, 2) <> #$FF#$FE then Exit;
        SetLength(W, (Size - 2) div SizeOf(WideChar));
        Read(W[1], Length(W) * SizeOf(WideChar));
        Memo2.Text := W;
      finally
        Free;
      end;
    end;
    //Utf8存、取
    procedure TForm1.Button1Click(Sender: TObject);
    var
      S: string;
    begin  //存
      with TMemoryStream.Create do try
        S := #$EF#$BB#$BF;
        Write(S[1], Length(S));
        S := AnsiToUtf8(Memo1.Text);
        Write(S[1], Length(S));
        Position := 0;
        SaveToFile('c:\temp\temp.txt');
      finally
        Free;
      end;
    end;
    procedure TForm1.Button2Click(Sender: TObject);var  S: string;
    begin  //取
      if not FileExists('c:\temp\temp.txt') then Exit;
      with TMemoryStream.Create do try
        LoadFromFile('c:\temp\temp.txt');
        SetLength(S, Size);
        Read(S[1], Length(S));
        if Copy(S, 1, 3) <> #$EF#$BB#$BF then Exit;
        Memo2.Text := Utf8ToAnsi(Copy(S, 4, MaxInt));
      finally
        Free;
      end;
    end;
      

  3.   

    delphi 2009之后的版本:
    Memo1.Lines.SaveToStream(stream, TEncoding.UTF8);