我有一个错误报告显示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条答案
按热度按时间mwyxok5s1#
此程序将重现您报告的错误:
这里我把原始文件写成ANSI格式,然后调用
AppendAllText
,它将尝试写成UTF-8格式,结果是我们在这个函数中结束:错误源于以下行:
型
问题是
UTFStr
实际上不是有效的UTF-8
,因此TEncoding.UTF8.GetString(UTFStr)
抛出异常。这是
TFile.AppendAllBytes
中的一个缺陷,由于它非常清楚UTFStr
是ANSI
编码的,所以它调用TEncoding.UTF8.GetString
是毫无意义的。你应该提交一个bug报告给Embarcadero,这个缺陷仍然存在于 Delphi 10西雅图中。同时你不应该使用
TFile.AppendAllBytes
。