Как прочитать текстовый файл, который содержит "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 с этим новым файлом.