Genau das ist aber sein Problem
Utf8ToAnsi(sl_Input_UTF_8_File.Strings[i])
.
Da wird eine
Unicode-Zeichenfolge als UTF8 interpretiert und als
Ansi ausgegeben. Das geht halt in die Hose
Der Name der Funktion ist (aus Kompatibilitätsgründen) irreführend und es wird dort ein UnicodeString (= string) zurückgegeben und kein AnsiString. Es erfolgt auch keine Umwandlung in
ANSI, sondern der Fehler tritt dadurch auf, daß als Parameter ein RawByteString in UTF8-Kodierung erwartet wird, aber eben
Unicode ankommt. Deswegen muss man bei RawByteString aufpassen, daß der Inhalt auch passt.
Nur so nebenbei: Für die Umwandlung von UTF8 nach
Ansi bedarf es eigentlich keiner speziellen Routine. Allein durch die richtige Deklaration der Variablen erledigt der Compiler bei simpler Zuweisung den Rest (mit entsprechender Warnung).
Delphi-Quellcode:
var
S: string;
A: UTF8String;
B: AnsiString;
...
S := 'Häufiges Hüpfen verödet unverhältnismäßig den Rasen';
A := S;
B := A;
Assert(B = S, 'Falsche CodePage!');