LoadFromFile с данными Юникода

мой входной файл (f) имеет некоторый Unicode (шведский), который не читается правильно.

ни один из этих подходов работает, хотя они дают разные результаты:

  LoadFromFile(f);

или

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

Я использую Delphi XE

Как я могу загрузить некоторые данные Unicode....также как я впоследствии SaveToFile? Спасибо

2 ответов


чтобы загрузить текстовый файл Unicode, вам нужно знать его кодировку. Если файл имеет Знак порядка байтов (BOM), то вы можете просто вызвать LoadFromFile(FileName) и RTL будет использовать спецификацию для определения кодировки.

Если в файле нет спецификации, вам нужно явно указать кодировку, например

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

по какой-то неизвестной мне причине нет встроенной поддержки UTF-32, но если бы у вас был такой файл, то было бы достаточно легко добавить TEncoding экземпляр чтобы справиться с этим.


Я предполагаю, что вы имеете в виду "UTF-8", когда говорите "Unicode".

Если вы знаете, что файл UTF-8, то ли

LoadFromFile(f, TEncoding.UTF8).

сохранить:

SaveToFile(f, TEncoding.UTF8);

(том GetOEMCP функция WinAPI предназначена для старых 255-символьных наборов символов.)