AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unicode: UTF-16 surrogate pairs?

Ein Thema von Deep-Sea · begonnen am 11. Sep 2009 · letzter Beitrag vom 21. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#1

Unicode: UTF-16 surrogate pairs?

  Alt 11. Sep 2009, 09:27
Morgen allerseits ...

Bei meinen Experimenten mit Unicode habe ich festgestellt, dass Delphi mit UTF-16 surrogate pairs nicht umgehen kann. Stimmt das, oder bin ich wieder einmal nur zu doof?

Noch eine Kleinigkeit: U+0000 ist ya definiert - aber wie soll man so die BOM von UTF-16 eindeutig von UTF-32 unterscheiden, wenn ein UTF-16-Text mit zwei "Nullen" starten kann?

Danke ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Unicode: UTF-16 surrogate pairs?

  Alt 11. Sep 2009, 09:31
Zitat von Deep-Sea:
Bei meinen Experimenten mit Unicode habe ich festgestellt, dass Delphi mit UTF-16 surrogate pairs nicht umgehen kann. Stimmt das, oder bin ich wieder einmal nur zu doof?
Was hast du probiert?

Zitat von Deep-Sea:
Noch eine Kleinigkeit: U+0000 ist ya definiert
<control> = NULL

Zitat von Deep-Sea:
- aber wie soll man so die BOM von UTF-16 eindeutig von UTF-32 unterscheiden, wenn ein UTF-16-Text mit zwei "Nullen" starten kann?
Wieso nicht? Siehe Wikipedia
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Unicode: UTF-16 surrogate pairs?

  Alt 11. Sep 2009, 09:39
Zitat von Bernhard Geyer:
Was hast du probiert?
Einen String anzuzeigen, der ein surrogate pair enthielt. Resultat: Es werden zwei nicht darstellbare Zeichen angezeigt - wie man es erwartet, wenn surrogate pairs nicht unterstützt werden. Nur woran liegt das? Delphi? Windows? ...

Zitat von Bernhard Geyer:
Wieso nicht? Siehe Wikipedia
Zitat von Wikipedia:
UTF-16 Little Endian FF FE
UTF-32 Little Endian FF FE 00 00
Genau. Beide starten gleich und eine UTF-16 Datei darf ya Null-Zeichen enthalten, z.B.: FF FE 00 00 ... und nun? Dann sieht es aus was wäre es UTF-32 ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Unicode: UTF-16 surrogate pairs?

  Alt 11. Sep 2009, 09:51
Zitat von Deep-Sea:
Einen String anzuzeigen, der ein surrogate pair enthielt. Resultat: Es werden zwei nicht darstellbare Zeichen angezeigt - wie man es erwartet, wenn surrogate pairs nicht unterstützt werden. Nur woran liegt das? Delphi? Windows? ...
Welche Windows-Version? AFAIK wird UTF-16 erst ab XP bzw. W2K unterstützt.

Zitat von Deep-Sea:
Zitat von Bernhard Geyer:
Wieso nicht? Siehe Wikipedia
Zitat von Wikipedia:
UTF-16 Little Endian FF FE
UTF-32 Little Endian FF FE 00 00
Genau. Beide starten gleich und eine UTF-16 Datei darf ya Null-Zeichen enthalten, z.B.: FF FE 00 00 ... und nun? Dann sieht es aus was wäre es UTF-32 ...
Nein. In einem UTF-16-String ist 0000 der Kennzeichner für String-Ende. (So wie 00 für einen Ansi-String der Ende-Kennzeichner ist). Und damit weist du nach den Bytes 3+4 das es eine UTF-32 Datei ist.
Schon mal Probiert einen String mit 0000 einer Wide-WinAPI zu übergeben? Der String wird dort abgeschnitten. Delphi kann mit String-Endekennzeichnern mitten im String umgehen. C/C++ jedoch nicht (und auch alle C-Kompatiblen Schnittstellen auch nicht).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Unicode: UTF-16 surrogate pairs?

  Alt 11. Sep 2009, 09:56
Zitat von Bernhard Geyer:
Welche Windows-Version? AFAIK wird UTF-16 erst ab XP bzw. W2K unterstützt.
XP. Sind hier in der Firma voll up-to-date ...
PS: Mein Firefox kann damit (sehr gut) umgehen. Aber den juckt Windows wahrscheinlich auch net sonderlich - sofern es an Windows liegt ...

Zitat von Deep-Sea:
Schon mal Probiert einen String mit 0000 einer Wide-WinAPI zu übergeben? Der String wird dort abgeschnitten. Delphi kann mit String-Endekennzeichnern mitten im String umgehen. C/C++ jedoch nicht (und auch alle C-Kompatiblen Schnittstellen auch nicht).
Ya das weiß ich natürlich, aber es ist prinzipiell möglich U+0000 zu nutzen Na ok, war ya auch nur eine Randfrage ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#6

Re: Unicode: UTF-16 surrogate pairs?

  Alt 11. Sep 2009, 09:59
Die #$0000 (alleinestehend) gehört doch garnicht zu den Surrogate Pairs (#$D800..#$DBFF, #$DC00..#$DFFF)

Im Normalfall wird die #0 als Ende-Markierung genutzt und demnach wäre es doch ein bissl schwachsinnig diese gleich als erstes Zeichen nach der BOM zu schreiben.
Und demnach kommt einfach in UTF16 kein FF FE 00 00 am Anfang vor.


http://en.wikipedia.org/wiki/UTF-16/UCS-2
http://unicode.org/faq/utf_bom.html#utf16-2
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Unicode: UTF-16 surrogate pairs?

  Alt 11. Sep 2009, 10:01
Zeig mal deinen Quellcode zur Ausgabe des Surrogate Pairs.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Unicode: UTF-16 surrogate pairs?

  Alt 11. Sep 2009, 10:09
Zitat von himitsu:
Die #$0000 (alleinestehend) gehört doch garnicht zu den Surrogate Pairs (#$D800..#$DBFF, #$DC00..#$DFFF)
Waren ya auch zwei verschiedene Fragen von mir die nix miteinander zu tun haben


Zitat von Bernhard Geyer:
Zeig mal deinen Quellcode zur Ausgabe des Surrogate Pairs.
Hab keinen mehr, waren ya nur Tests. Wie wäre es mit Canvas.TextOut(0, 0, #$D834 + #$DD1E); // Notenschlüssel Aber mal 'ne andere Frage: Wer hat denn schon mal erfolgreich ein Zeichen das nicht im BMP steht mit Delphi ausgegeben?
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Unicode: UTF-16 surrogate pairs?

  Alt 11. Sep 2009, 10:13
Zitat von Deep-Sea:
Hab keinen mehr, waren ya nur Tests. Wie wäre es mit Canvas.TextOut(0, 0, #$D834 + #$DD1E); // Notenschlüssel
Sag mal: Welche Delphi-Version verwendest Du? Links steht ja bei dir noch D2006
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Unicode: UTF-16 surrogate pairs?

  Alt 11. Sep 2009, 10:15
Zitat von Bernhard Geyer:
Sag mal: Welche Delphi-Version verwendest Du? Links steht ja bei dir noch D2006
Ups, wohl vergessen zu ändern *schnell noch mach* > D2009 Pro
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz