Einzelnen Beitrag anzeigen

Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.018 Beiträge
 
Delphi 2009 Professional
 
#8

AW: UTF8 nach Unicode

  Alt 8. Sep 2019, 19:52
Delphi Rio nutzt doch als Typ für string einen WideString oder auch UnicodeString. Du schreibst, das ist UTF-16.
UTF-16 hat aber doch ggf. mehr als 2 Byte pro Zeichen.
Und WideString sind doch immer fest 2 Byte pro Zeichen, oder irre ich?
Bin jetzt eher verwirrt.
WideString ist ein Windows-Typ und Windows ab 2000 definiert WideStrings als UTF-16LE (Vorgänger-NTs: UCS-2LE). Sie kodieren jedes Zeichen mit 2 oder 4 Bytes, da man die 1.112.064 Codepunkte nicht mit 2 Bytes darstellen kann.

Bei den 2-Byte-Zeichen ist UTF-16 dasselbe wie UCS-2 (und UTF-8 dasselbe wie CESU-8), Zeichen darüber werden durch Surrogates kodiert, die sich an der Stelle 0xD800 bis 0xDFFF in der Ebene 0 (BMP) befinden. Die Surrogates sind keine Codepunkte und haben deshalb in UTF-8 nichts zu suchen. Der Versuch, Surrogates wie Codepunkte zu behandeln führt zu CESU-8, das Zeichen mit 1, 2, 3 oder 6 Byte kodiert.

Bezüglich CESU-8. Was erzeugt TEncoding.UTF8 in Delphi denn?
UTF-8.

Ich brauche auf jeden Fall einen Konverter von einem String aus Delphi 10.3 und einem XML UTF-8 Datenstrom.
Komm ich das mit dem CESU-8 zurecht?
Legt eine Software eine UTF-8-Eingabe zunächst als UTF-16 im Speicher ab und führt sie keine gesonderte Prüfung durch, unterstützt sie auch CESU-8.
Es gibt Software, die behauptet, UTF-8 zu unterstützen, meint aber CESU-8. Jeweils andere Programme unterstützen nur die BMP, sodass die Frage egal ist. Teilweise stürzen Programme auch ab, wenn man das jeweils andere eingibt.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat