LoadFromFile与Unicode数据

bob*_*bey 8 delphi delphi-xe

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

虽然它们给出了不同的结果,但这两种方法都不起作用:

  LoadFromFile(f);
Run Code Online (Sandbox Code Playgroud)

要么

  LoadFromFile(f,TEncoding.GetEncoding(GetOEMCP));
Run Code Online (Sandbox Code Playgroud)

我正在使用Delphi XE

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

Dav*_*nan 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
Run Code Online (Sandbox Code Playgroud)

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


And*_*and 7

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

如果您知道该文件是UTF-8,那么就做

LoadFromFile(f, TEncoding.UTF8).
Run Code Online (Sandbox Code Playgroud)

要保存:

SaveToFile(f, TEncoding.UTF8);
Run Code Online (Sandbox Code Playgroud)

(GetOEMCPWinAPI函数用于旧的255个字符的字符集.)