Показать сообщение отдельно
  #8  
Старый 12.08.2011, 00:57
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

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 как в анси.
__________________
Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра.
Ответить с цитированием