如何将备忘录保存为 unicode

How to save a memo as unicode

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

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

您应该通过切换到 TNT Unicode 组件来处理这个问题。一旦您开始使用 TNT Unicode components,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;