Entwickler-Ecke

Internet / Netzwerk - UTF8-Übertragung


Flamefire - Di 04.01.11 02:06
Titel: UTF8-Übertragung
Ich lade eine XML-Datei, die (u.U.) UTF-8 kodiert ist, aus dem Internet in einen String (mittels IdHTTP.Get)
Wenn ich mir die aber in einem Memo ausgeben lasse, sind die Umlaute "kaputt"
Wie kann ich das fixen?
Ich möchte die Datei dann später in einen XML-Parser reinhaun und die einzelnen Felder in Labels o.ä. ausgeben.


Delete - Di 04.01.11 02:08

Du brauchst Unicode-Komponenten zum Darstellen. Und einen Parser, der Unicode verarbeiten kann.


Flamefire - Di 04.01.11 02:40

Hab Delphi 2009. Der benutzt doch WideStrings als Standart. Müsste das damit nicht gehn?
Will eigentlich nicht noch zusätzlich Komponenten verwenden, wenn nicht unbedingt nötig.


Martok - Di 04.01.11 03:01

UTF-8 ist nicht WideString, das ist UTF-16 ;)

Da gibts eine Funktion in der RTL für, UTF8To???, wie die genau heißt weiß ich grade nicht aus dem Kopf.


Delete - Di 04.01.11 05:42

Stimmt. Delphi 2009 kann ja schon Unicode (UTF-16).


jaenicke - Di 04.01.11 06:39

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Da gibts eine Funktion in der RTL für, UTF8To???, wie die genau heißt weiß ich grade nicht aus dem Kopf.
Da gibt es genauer gesagt sogar zwei. Und zwar Utf8Decode (für Delphi <= 2007, danach als deprecated markiert) und Utf8ToString (für Delphi 2009+).

Deshalb benutze ich sowas:

Delphi-Quelltext
1:
2:
3:
4:
5:
  {$ifdef UNICODE} // ab Delphi 2009
  Result := Utf8ToString(MyUtf8String);
  {$else}
  Result := Utf8Decode(MyUtf8String);
  {$endif}
Zudem gibt es Utf8Decode erst ab Delphi 7 oder so, d.h. für ältere Versionen müsste ggf. noch einmal eine Unterscheidung rein (wenn der Code kompatibel sein soll).