Seit Delphi 2009 gibt es im LoadFrom... auch noch die Behandlung des Encodings.
Und da kommt es auch drauf an, wie TEncoding mit #0 umgeht.
Nach dem Laden und Decodieren der Datei/Stream kommt der Text dann in TStrings.SetTextStr rein und siehe da, eine Abbruchbehandlung für #0, da das Ganze als PChar behandelt wird.
Delphi-Quellcode:
procedure TStrings.SetTextStr(const Value: string);
var
P, Start, LB: PChar;
S: string;
LineBreakLen: Integer;
begin
BeginUpdate;
try
Clear;
P := Pointer(Value);
if P <> nil then
if CompareStr(LineBreak, sLineBreak) = 0 then
begin
// This is a lot faster than using StrPos/AnsiStrPos when
// LineBreak is the default (#13#10)
while P^ <> #0 do
begin
Start := P;
while not (P^ in [#0, #10, #13]) do Inc(P);
SetString(S, Start, P - Start);
Add(S);
if P^ = #13 then Inc(P);
if P^ = #10 then Inc(P);
end;
end
else
begin
LineBreakLen := Length(LineBreak);
while P^ <> #0 do
begin
Start := P;
LB := AnsiStrPos(P, PChar(LineBreak));
while (P^ <> #0) and (P <> LB) do Inc(P);
SetString(S, Start, P - Start);
Add(S);
if P = LB then
Inc(P, LineBreakLen);
end;
end;
finally
EndUpdate;
end;
end;