Как прочитать текстовый файл, который содержит "NULL CHARACTER" в Delphi?

У меня есть текстовый файл, который содержит много пустых символов и его кодировка UTF8.

Я загрузил файл, используя RichEdit1.Lines.LoadFromFile(FileName,Encoding) остановлен после первого нулевого символа и не загружает оставшуюся часть файла.

Есть ли помощь? Как я могу удалить NULL Chars из текстового файла.

** Кстати, моя кодировка текстового файла - UTF8.

2 ответа

Решение

Чтение файла не должно быть проблемой. Скорее проблема более вероятна, когда вы пытаетесь сохранить данные в элементе управления rich-edit. Эти элементы управления не принимают произвольные двоичные данные. Вы должны убедиться, что вы помещаете текст только в этот элемент управления.

Загрузите файл в обычную строку или поток:

var
  s: string;
  ss: TStringStream;

s := TFile.ReadAllText(FileName);

Затем удалите недопустимые символы. #0 это нотация в Delphi для обозначения нулевого символа Обычно мы могли бы использовать StringReplace удалить персонажей:

s := StringReplace(s, #0, '', [rfReplaceAll]);

Тем не менее, это не бинарно-безопасно; он останавливается на нулевых символах. Вместо этого вам понадобится другая функция для удаления этих символов. Я продемонстрировал это раньше. Вызовите эту функцию, чтобы настроить строку:

RemoveNullCharacters(s);

Наконец, поместите данные в элемент управления rich-edit:

ss := TStringStream.Create(s);
try
  RichEdit1.Lines.LoadFromStream(ss, Encoding);
finally
  ss.Free;
end;

Вы уверены, что это UTF8, а не файл UNICODE? Как вы, возможно, знаете, UNICODE - это два байта, где первый является нулевым символом для языков, не являющихся UNICODE, например, для китайского и тому подобного. Вы пытались открыть файл с помощью редактора IDE? Откройте его, выделите весь текст (Ctrl+A) и скопируйте (Ctrl+C), создайте новый пустой текстовый файл и вставьте (Ctrl+V) текст. Сохраните новый файл и попробуйте RichEdit с этим новым файлом.

Другие вопросы по тегам