编码ASCII文件

时间:2014-01-14 07:30:38

标签: delphi

这个问题有一个非常简单的答案,没有我猜?

如果我从x64位unicode delphi app我的stringlist编码,就像这样

StringList.SaveToFile(FileName, TEncoding.ASCII);

在使用语句

编写此文件时,是否存在任何其他限制,文件布局的差异
StringList.SaveToFile(FileName);

StringList.SaveToFile(FileName, TEncoding.UTF8);

我害怕在两个版本之间的线路长度和控制字符问题....答案否会让我开心。

2 个答案:

答案 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文件。