Delphi 如何将备忘录另存为unicode

Delphi 如何将备忘录另存为unicode,delphi,delphi-7,Delphi,Delphi 7,我正在使用Delphi7,如何将备忘录保存为Unicode文本文件,我找到了一些将其保存为UTF-8文本文件的示例,但我需要一个将文件保存为Unicode的示例。 感谢您的帮助您需要使用支持Unicode的控件。Delphi 7TMemo没有。这意味着你真正的问题不是保存内容,而是首先承认内容 您应该通过切换到TNT Unicode组件来解决这个问题。一旦开始使用,TNT Unicode备忘录支持将内容保存为Unicode。UTF-8是Unicode。它只是Unicode数据的字节编码方案。如果

我正在使用Delphi7,如何将备忘录保存为Unicode文本文件,我找到了一些将其保存为UTF-8文本文件的示例,但我需要一个将文件保存为Unicode的示例。
感谢您的帮助

您需要使用支持Unicode的控件。Delphi 7
TMemo
没有。这意味着你真正的问题不是保存内容,而是首先承认内容


您应该通过切换到TNT Unicode组件来解决这个问题。一旦开始使用,TNT Unicode备忘录支持将内容保存为Unicode。

UTF-8
是Unicode。它只是Unicode数据的字节编码方案。如果您的真正意思是需要将文件保存为
UTF-16
而不是
UTF-8
,那么这是另一个问题

最好的选择是使用基于Unicode的Memo控件,并让它为您处理Unicode数据。您真的应该升级到现代的基于Unicode的Delphi版本(Delphi 2009或更高版本),让它为您处理Unicode转换。如果您使用的是旧的基于ANSI的Delphi版本(Delphi 2007或更早版本),那么您应该使用第三方Unicode UI控件,就像David建议的那样

然而,如果您坚持使用基于本机VCL-ANSI的Memo,您仍然可以完成您所要求的,您只需要在代码中手动管理转换。您可以使用
WideString
字符串类型(内部使用
MultiByteToWideChar()
将ANSI数据转换为UTF-16)将
TMemo
基于ANSI的数据转换为UTF-16,然后将UTF-16数据写入文件

例如:

var
  BOM: WideChar;
  FS: TFileStream;
  WS: WideString;
  I: Integer;
begin
  FS := TFileStream.Create('MyUnicodeFile.txt', fmCreate);
  try
    BOM := WideChar($FEFF);
    FS.WriteBuffer(BOM, SizeOf(BOM));
    For I := 0 to Memo1.Lines.Count-1 do
    begin
      WS := WideString(Memo1.Lines[I] + sLineBreak);
      FS.WriteBuffer(PWideChar(WS)^, Length(WS) * SizeOf(WideChar));
    end;
  finally
    FS.Free;
  end;
end;