Daher denke ich, dass das auch wirklich so ausgegeben wird :(
Das bezweifle ich auch nicht.
Du versäumst aber, deine eigentliche Datenquelle zu analysierne. Du nimmst pauschal an, dass der Zeilenumbruch ausschließlich durch das Linefeed-Zeichen erzeugt wird - offensichtlich stimmt das nicht. Es gibt eine ganze Reihe nicht sichtbarer (bzw. nicht druckbarer) Zeichen. U+200B (ZERO WIDTH SPACE) ist z.B. so ein Fall.
Siehe hier:
foobar
Augenscheinlich sieht das nach folgendem aus:
U+0066 = f
U+006F = o
U+006F = o
U+0062 = b
U+0061 = a
U+0072 = r
Tatsächlich aber wird dir ein Hex-Editor folgendes zeigen:
0066 006F 006F 200B 200B 200B 200B 200B 0062 0061 0072
Mit jeglicher Ersetzungsfunktion wirst du dich schwarz ärgern, weil du "foobar" nicht finden wirst wenn du nach "foobar" suchst.