Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unicode: UTF-16 surrogate pairs? (https://www.delphipraxis.net/140073-unicode-utf-16-surrogate-pairs.html)

Deep-Sea 11. Sep 2009 09:27


Unicode: UTF-16 surrogate pairs?
 
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? :gruebel:

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 ...

Bernhard Geyer 11. Sep 2009 09:31

Re: Unicode: UTF-16 surrogate pairs?
 
Zitat:

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? :gruebel:

Was hast du probiert?

Zitat:

Zitat von Deep-Sea
Noch eine Kleinigkeit: U+0000 ist ya definiert

<control> = NULL

Zitat:

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

Deep-Sea 11. Sep 2009 09:39

Re: Unicode: UTF-16 surrogate pairs?
 
Zitat:

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:

Zitat von Bernhard Geyer
Wieso nicht? Siehe Wikipedia

Zitat:

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 ...

Bernhard Geyer 11. Sep 2009 09:51

Re: Unicode: UTF-16 surrogate pairs?
 
Zitat:

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:

Zitat von Deep-Sea
Zitat:

Zitat von Bernhard Geyer
Wieso nicht? Siehe Wikipedia

Zitat:

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).

Deep-Sea 11. Sep 2009 09:56

Re: Unicode: UTF-16 surrogate pairs?
 
Zitat:

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 :mrgreen: ...
PS: Mein Firefox kann damit (sehr gut) umgehen. Aber den juckt Windows wahrscheinlich auch net sonderlich - sofern es an Windows liegt ...

Zitat:

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 :P Na ok, war ya auch nur eine Randfrage ...

himitsu 11. Sep 2009 09:59

Re: Unicode: UTF-16 surrogate pairs?
 
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. :angel2:


http://en.wikipedia.org/wiki/UTF-16/UCS-2
http://unicode.org/faq/utf_bom.html#utf16-2

Bernhard Geyer 11. Sep 2009 10:01

Re: Unicode: UTF-16 surrogate pairs?
 
Zeig mal deinen Quellcode zur Ausgabe des Surrogate Pairs.

Deep-Sea 11. Sep 2009 10:09

Re: Unicode: UTF-16 surrogate pairs?
 
Zitat:

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 :-D


Zitat:

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
Delphi-Quellcode:
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?

Bernhard Geyer 11. Sep 2009 10:13

Re: Unicode: UTF-16 surrogate pairs?
 
Zitat:

Zitat von Deep-Sea
Hab keinen mehr, waren ya nur Tests. Wie wäre es mit
Delphi-Quellcode:
Canvas.TextOut(0, 0, #$D834 + #$DD1E); // Notenschlüssel

Sag mal: Welche Delphi-Version verwendest Du? Links steht ja bei dir noch D2006

Deep-Sea 11. Sep 2009 10:15

Re: Unicode: UTF-16 surrogate pairs?
 
Zitat:

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 :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 Uhr.
Seite 1 von 2  1 2      

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