То, что вы видите, вероятно, не нулевые символы.Вероятно, это всего лишь старшие восемь битов символа со значением кодовой точки меньше 256.
Если у вас действительно есть нулевые символы в вашей строке, которых не должно быть, первое, что нужноВы должны выяснить, как они туда добираются.Вероятно, в вашей программе есть ошибка, если они есть, когда их не должно быть.
Если код, который генерирует строку, не содержит ошибок и у вас все еще есть нежелательные нулевые символы, то вы можете удалить их справедливобез труда.Обычный способ удаления содержимого из строки - стандартная функция Delete
.Вы можете указать любой символ по его числовому значению с синтаксисом #
, и компилятор обычно может выяснить, должен ли он представлять AnsiChar или WideChar.
procedure RemoveNullCharacters(var s: WideString);
var
i: Integer;
begin
i := 1;
while i < Length(s) do
if s[i] = #0 then
Delete(s, i, 1)
else
Inc(i);
end;
Но это может перераспределитьСтрока много раз (один раз для каждого нулевого символа).Чтобы избежать этого, вы можете упаковать строку на месте:
procedure RemoveNullCharacters(var s: WideString);
var
i, j: Integer;
begin
j := 0;
for i := 1 to Length(s) do
if s[i] <> #0 then begin
Inc(j);
s[j] := s[i];
end;
if j < Length(s) then
SetLength(s, j);
end;
Эти функции будут работать для любых типов строк Delphi;просто измените тип параметра.