LoadFromFile与Unicode数据

时间:2012-05-12 16:07:06

标签: delphi delphi-xe

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

这些方法都不起作用,尽管它们会产生不同的结果:

  LoadFromFile(f);

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

我正在使用Delphi XE

我如何LoadFromFile一些Unicode数据....还有我如何随后SaveToFile?感谢

2 个答案:

答案 0 :(得分: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实例来处理它就足够了。

答案 1 :(得分:7)

当你说'Unicode'时,我认为你的意思是'UTF-8'。

如果您知道该文件是UTF-8,那么请执行

LoadFromFile(f, TEncoding.UTF8).

保存:

SaveToFile(f, TEncoding.UTF8);

GetOEMCP WinAPI函数用于旧的255个字符的字符集。)