我的输入文件(f)有一些无法正确读取的Unicode(瑞典语)。
这些方法都不起作用,尽管它们会产生不同的结果:
LoadFromFile(f);
或
LoadFromFile(f,TEncoding.GetEncoding(GetOEMCP));
我正在使用Delphi XE
我如何LoadFromFile一些Unicode数据....还有我如何随后SaveToFile?感谢
答案 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个字符的字符集。)