如何保存UTF-16(小端)和字符串值在一个文件中的 Delphi 7?[关闭]

2q5ifsrm  于 2023-05-06  发布在  其他
关注(0)|答案(1)|浏览(510)

已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。

4天前关闭。
这篇文章是编辑并提交审查3天前.
Improve this question
我想将编辑框中的值和UTF-16(小端)值保存在一个文件中。我给予一个简单的例子来更好地理解我的问题:

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

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

m0rkklqb

m0rkklqb1#

十六进制只是字符串的UTF-16(小端)编码形式的原始字节。
2009年之前的 Delphi 版本(如Delphi 7)对Unicode的支持非常有限,但您可以简单地将字符串分配给WideString(Delphi对UTF-16 LE COM字符串的 Package 器),然后将其字符的原始字节写入文件,并预先添加UTF-16 LE BOM,例如:

uses
  Classes;

const
  BOM: 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 通过UnicodeStringTEncoding.(BigEndian)Unicode等对UTF-16字符串提供了更多的支持,例如:

uses
  System.IOUtils;

begin
  TFile.WriteAllText('text.txt', 'ᗿABC', TEncoding.Unicode);
end;

相关问题