如何在 Delphi 7 中的文件中保存 UTF-16(Little Endian)和字符串值?

问题描述 投票:0回答:1

我想将编辑框中的值和 UTF-16(Little Endian)值保存在文件中。

我将举一个简单的例子来更好地理解我的问题:

Edit Box Value => 'Good';
Hex value = FFFEFF15410042004300
which is equivalent to UTF-16 (Little Endian) => ᗿABC

现在我希望将

Good
ᗿABC
的值保存在一个文件中,这样如果我们用记事本打开保存的文件,它将显示值:
ᗿABCGood
,如果我们用十六进制编辑器打开它,它会显示值:
FFFEFF1541004200430047006F006F006400

delphi delphi-7
1个回答
1
投票

您的十六进制只是字符串的 UTF-16(Little Endian)编码形式的原始字节。

2009 年之前的 Delphi 版本(如 Delphi 7)对 Unicode 的支持非常有限,但您可以简单地将字符串分配给

WideString
(Delphi 的 UTF-16LE COM 字符串包装器),然后将其字符的原始字节写入文件,前面带有 UTF-16LE BOM,例如:

uses
  Classes;

const
  BOM: WideChar = WideChar($FEFF);
var
  W: WideString;
  FS: TFileStream;
begin
  W := 'ᗿABC';
  FS := TFileStream.Create('text.txt', fmCreate);
  try
    FS.WriteBuffer(BOM, Sizeof(BOM));
    FS.WriteBuffer(PWideChar(W)^, Length(W) * Sizeof(WideChar));
  finally
    FS.Free;
  end;
end;

自 2009 年以来,Delphi 通过

UnicodeString
TEncoding.(BigEndian)Unicode
等对 UTF-16 字符串提供了更多支持。例如:

uses
  System.IOUtils;

begin
  TFile.WriteAllText('text.txt', 'ᗿABC', TEncoding.Unicode);
end;
© www.soinside.com 2019 - 2024. All rights reserved.