我有一个bug报告显示一个EEncodingError
。日志指向TFile.AppendAllText
。我调用TFile.AppendAllText
是我的这个过程:
procedure WriteToFile(CONST FileName: string; CONST uString: string; CONST WriteOp: WriteOpperation; ForceFolder: Boolean= FALSE); // Works with UNC paths
begin
if NOT ForceFolder
OR (ForceFolder AND ForceDirectoriesMsg(ExtractFilePath(FileName))) then
if WriteOp= (woOverwrite)
then IOUtils.TFile.WriteAllText (FileName, uString)
else IOUtils.TFile.AppendAllText(FileName, uString);
end;
这是来自EurekaLog的信息。
什么会导致这种情况发生?
1条答案
按热度按时间z8dt9xmd1#
此程序将重现您报告的错误:
在这里,我将原始文件写成ANSI格式。然后调用
AppendAllText
,它将尝试写成UTF-8格式。发生的事情是,我们最终得到了这个函数:错误源于以下行:
问题是
UTFStr
实际上不是有效的UTF-8
,因此TEncoding.UTF8.GetString(UTFStr)
抛出一个异常。这是
TFile.AppendAllBytes
中的一个缺陷。鉴于它完全知道UTFStr
是ANSI
编码的,它调用TEncoding.UTF8.GetString
根本没有意义。你应该向Embarcadero提交一个bug报告,因为这个缺陷仍然存在于 Delphi 10西雅图中。在此期间,你不应该使用
TFile.AppendAllBytes
。