8

我的输入文件 (f) 有一些未正确读取的 Unicode(瑞典语)。

这些方法都不起作用,尽管它们给出了不同的结果:

  LoadFromFile(f);

或者

  LoadFromFile(f,TEncoding.GetEncoding(GetOEMCP));

我正在使用德尔福 XE

我怎样才能 LoadFromFile 一些 Unicode 数据....以及我如何随后 SaveToFile?谢谢

4

2 回答 2

12

为了加载一个 Unicode 文本文件,您需要知道它的编码。如果文件有字节顺序标记 (BOM),那么您可以简单地调用LoadFromFile(FileName),RTL 将使用 BOM 来确定编码。

如果文件没有 BOM,那么您需要明确指定编码,例如

LoadFromFile(FileName, TEncoding.UTF8);
LoadFromFile(FileName, TEncoding.Unicode);//UTF-16 LE
LoadFromFile(FileName, TEncoding.BigEndianUnicode);//UTF-16 BE

出于某种原因,我不知道,没有对 UTF-32 的内置支持,但如果你有这样的文件,那么添加一个TEncoding实例来处理它就很容易了。

于 2012-05-12T16:44:51.330 回答
7

当您说“Unicode”时,我假设您的意思是“UTF-8”。

如果您知道该文件是 UTF-8,则执行

LoadFromFile(f, TEncoding.UTF8).

保存:

SaveToFile(f, TEncoding.UTF8);

GetOEMCPWinAPI 函数适用于旧的 255 个字符的字符集。)

于 2012-05-12T16:08:33.393 回答