gpt4 book ai didi

delphi - 如何让 Delphi 2006 TStringList.LoadFromFile 加载 UTF-16 文件

转载 作者:行者123 更新时间:2023-12-03 15:51:03 29 4
gpt4 key购买 nike

我有一个 Delphi 2006 应用程序,我正在添加代码来处理一些生成的 CSV 数据文件。 TStringList.LoadFromFile 给出了奇怪的结果,我刚刚发现这些文件是 UTF-16 编码的。

已计划升级到 XE,但目前还不能选择。

使用 D2006 处理这些文件的最简单途径是什么?我假设它们可以毫无问题地映射到 8 位 ASCII - 它们是“纯”CSV - 只是数字和逗号等,而且我认为 8 位以外的字符不会有任何问题- 位设置。

最佳答案

TStringList 在 D2006 中不支持 UTF-16,因此您必须手动加载和解码文件数据,然后才能将输出放入 TStringList。例如:

var
sl: TStringList;
{$IFNDEF D2009_OR_LATER}
ms: TMemoryStream;
ptr: PWideChar;
s: AnsiString;
dlen, slen: Integer;
{$ENDIF}
begin
...
{$IFDEF D2009_OR_LATER}
sl.LoadFromFile('...', TEncoding.Unicode);
{$ELSE}
ms := TMemoryStream.Create;
try
ms.LoadFromFile('...');
ptr := PWideChar(ms.Memory);
dlen := ms.Size div SizeOf(WideChar);
if (dlen >= 1) and (PWord(ptr)^ = $FEFF) then
begin
Inc(ptr);
Dec(dlen);
end;
slen := WideCharToMultiByte(0, 0, ptr, dlen, nil, 0, nil, nil);
if slen > 0 then begin
SetLength(s, slen);
WideCharToMultiByte(0, 0, ptr, dlen, PAnsiChar(s), slen, nil, nil));
end;
sl.Text := s;
finally
ms.Free;
end;
{$ENDIF}
...
end;

关于delphi - 如何让 Delphi 2006 TStringList.LoadFromFile 加载 UTF-16 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514318/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com