memo如何保存为utf8格式的文本文件

时间:2022-10-10 22:17:41
我知道notepad保存文件时是有编码选项的,memo如何做到呢。谢谢。

4 个解决方案

#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


谢谢。

#4


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

#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


谢谢。

#4


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