Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#13

AW: Utf8ToAnsi funktioniert nicht mit Umlauten

  Alt 21. Okt 2014, 22:26
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!');
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat