пару месяцев назад я попросил аналогичный question. Благодаря Rob Kennedy я могу загрузить весь текст в Richedit
НО Я не смог удалить Null chars
. Я мог загрузить свой текст, потому что использовал Stream
.Невозможно удалить «Нулевые символы» из строки
Сейчас в этом коде:
var
strm : TMemorystream;
str : UTF8string;
ss : TStringstream;
begin
strm := tmemorystream.Create;
try
strm.LoadFromFile('C:\Text.txt');
setstring(str,PAnsichar(strm.Memory),strm.Size);
str := StringReplace(str, #0, '', [rfReplaceAll]); //This line doesn't work at all
ss := tstringstream.Create(str);
Richedit1.Lines.LoadFromStream(ss);
finally
strm.Free;
ss.Free;
end;
end;
TMemorystream
Я обратился к string
удалить Null Chars
с StringReplace()
и затем превращают его снова TStringstream
, чтобы загрузить его с Richedit.lines.LoadFromStream
.
Но моя проблема в том, что я не могу удалить Null Character
с помощью StringReplace()
. Я могу заменить другие символы, но не #0
.
Есть ли способ удалить нулевые charcters непосредственно в TMemorystream
и загрузить его в Richedit
? Как? Если это невозможно или это очень сложно, как я могу удалить их, когда я конвертирую свой текст в string
?
Спасибо.
1) вход один символ 2) если он это не 'NUL', а затем вывести его, иначе отбросить его 3) перейдите к шагу 1. –
Почему вы приняли мой ответ раньше, если он не сработал? Обратите внимание, что я обновил свой ответ, чтобы упомянуть о недостатке «StringReplace» и ссылку на [другой ответ] (http://stackoverflow.com/a/3685055/33732), который выполняет ту же задачу. –
Реальный вопрос: почему у файла есть нули в нем для начала? Текстовый файл с кодировкой UTF-8 не должен иметь никаких нулей, поэтому файл, скорее всего, не UTF-8. И этот код ужасно неэффективен для всех конверсий UTF8-> UTF16-> UTF8-> UTF16. –