Snake22, как я понял, ваша программа нормально считывает файл 2.txt, но "глючит" с файлом 4.txt, и поэтому вы решили спросить совета тут? Все дело в том, что в файле 2.txt нет сигнатуры (или как там она называется), а в 4.txt - она есть, а считывание информации из файла идет с 0, другими словами, при считывании инфы из 2 в строку идет юникодовый текст (с ним проблем нет), а вот из 4 - сигнатура и только после нее текст (а вот тут и возникает проблема). Вам нужно перед WideCharLenToString убрать из начала строки сигнатуру, если она есть.
А тов. angvelem правильно сказал, оба текста в кодировке UTF16LE, только один без сигнатуры.
Кстати, для сохранения юникодовой информации в файл сначала нужно записать сигнатуру, а потом текст. Поверьте, так будет лучше для всех.)
По аналогии с вашей программой:
Код:
var
s: string;
...
s:= #FF#FE;
BlockWrite(f, PChar(s)^, 2);
И еще заметил:
Код:
BlockWrite(f, PWideChar(WStr)^, Length(WStr));
Тут нужно Length(WStr) умножить на два, т.к. Length выдаёт только кол-во букв, а в юникоде буква - 2 байта, а не 1 как в анси.