我的输入文件 (f) 有一些未正确读取的 Unicode(瑞典语)。
这些方法都不起作用,尽管它们给出了不同的结果:
LoadFromFile(f);
或者
LoadFromFile(f,TEncoding.GetEncoding(GetOEMCP));
我正在使用德尔福 XE
我怎样才能 LoadFromFile 一些 Unicode 数据....以及我如何随后 SaveToFile?谢谢
为了加载一个 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
实例来处理它就很容易了。
当您说“Unicode”时,我假设您的意思是“UTF-8”。
如果您知道该文件是 UTF-8,则执行
LoadFromFile(f, TEncoding.UTF8).
保存:
SaveToFile(f, TEncoding.UTF8);
(GetOEMCP
WinAPI 函数适用于旧的 255 个字符的字符集。)