这个问题有一个非常简单的答案,是或没有我猜?
如果我从x64位unicode delphi app我的stringlist编码,就像这样
StringList.SaveToFile(FileName, TEncoding.ASCII);
在使用语句
编写此文件时,是否存在任何其他限制,文件布局的差异StringList.SaveToFile(FileName);
或
StringList.SaveToFile(FileName, TEncoding.UTF8);
我害怕在两个版本之间的线路长度和控制字符问题....答案否会让我开心。
答案 0 :(得分:3)
UTF-8和Windows“Ansi”代码页都是ASCII的超集。因此,如果字符串列表仅包含ASCII范围内的字符,那么如果您在前面加上以下字符,则列出的三个语句将是等效的:
StringList.WriteBOM := False;
这是因为默认情况下,TStrings
会写出一个小标记(BOM)来表示UTF-8文字。
答案 1 :(得分:2)
区别在于使用的编码。当然,这反过来会导致尺寸的差异。因此,ASCII文件将小于UTF-16(使用TEncoding.Unicode
得到的。)UTF-8文件可以与ASCII相同,也可以大于UTF-16。
我猜你在问是否以任何方式使用ASCII或UTF-8会损坏所写的文本。好吧,如果文本包含非ASCII字符,则使用ASCII。 ASCII只能编码127个字符。
另一方面,UTF-8是Unicode的完整编码。这意味着
StringList.SaveToFile(FileName, TEncoding.UTF8);
StringList.LoadFromFile(FileName, TEncoding.UTF8);
导致列表具有与保存之前完全相同的内容。
您询问是否可以SaveToFile
截断行。他们不能。
另一个要点是32/64位在这里不相关。代码在32位和64位下的行为方式完全相同。问题始终与编码有关。
我还会注意到你的问题的标题有点误导。使用TEncoding.UTF8
进行编码时,您没有ASCII文件。