Bei deinem Null-Problem ist die Funktion StringReplace dir keine große Hilfe. Sie benutzt selber an diversen Stellen eine Typumwandlung nach PChar. Das heißt sie ist völlig nutzlos um das Zeichen #0 aus einem String zu entfernen.
Lösung? Schreib dir einfach selbst eine kleine Funktion die dir das Zeichen #0 aus deinem String entfernt.
Delphi-Quellcode:
procedure ReplaceZero(var s: string);
var
i: Integer;
begin
for i := 1 to Length(s) do
begin
if Ord(s[i]) = 0 then
s[i] := '?';
end;
end;