![]() |
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 ... |
Re: Unicode: UTF-16 surrogate pairs?
Zitat:
Zitat:
Zitat:
![]() |
Re: Unicode: UTF-16 surrogate pairs?
Zitat:
Zitat:
Zitat:
|
Re: Unicode: UTF-16 surrogate pairs?
Zitat:
Zitat:
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). |
Re: Unicode: UTF-16 surrogate pairs?
Zitat:
PS: Mein Firefox kann damit (sehr gut) umgehen. Aber den juckt Windows wahrscheinlich auch net sonderlich - sofern es an Windows liegt ... Zitat:
|
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: ![]() ![]() |
Re: Unicode: UTF-16 surrogate pairs?
Zeig mal deinen Quellcode zur Ausgabe des Surrogate Pairs.
|
Re: Unicode: UTF-16 surrogate pairs?
Zitat:
Zitat:
Delphi-Quellcode:
Aber mal 'ne andere Frage: Wer hat denn schon mal erfolgreich ein Zeichen das nicht im BMP steht mit Delphi ausgegeben?
Canvas.TextOut(0, 0, #$D834 + #$DD1E); // Notenschlüssel
|
Re: Unicode: UTF-16 surrogate pairs?
Zitat:
|
Re: Unicode: UTF-16 surrogate pairs?
Zitat:
|
Re: Unicode: UTF-16 surrogate pairs?
*push*
Es muss doch irgend jemanden geben, der wenigstens ja oder nein sagen kann ... das würde mir ya schon reichen :stupid: |
Re: Unicode: UTF-16 surrogate pairs?
Es geht (D2009 und Windows). Jedoch habe ich keine Font mit entsprechenden Zeichen so das ich nur ein 𝄞 angezeigt bekomme.
Mein Testcode:
Delphi-Quellcode:
var
str: String; OrderText: String; i: Integer; begin str := #$D834 + #$DD1E; OrderText := ''; for i := 1 to Length(str) do OrderText := OrderText + ' #$' + IntToHex(Ord(str[i]), 4); Canvas.TextOut(100, 100, str); ShowMessage(Format('%s (%d), %s', [str, Length(str), OrderText])); Windows.MessageBox(self.Handle, PChar(str), 'Test', MB_OK); end; |
Re: Unicode: UTF-16 surrogate pairs?
Zitat:
Ich habe es eben nochmal getestet: Unter XP geht es nicht (zwei Platzhalter anstatt ein Notenschlüssel), aber unter Vista gehts! Juhu :mrgreen: (Aber vlt. muss man/ich das bei XP nur irgendwie aktivieren oder so?) |
Re: Unicode: UTF-16 surrogate pairs?
Eigentlich sollte es XP von sich aus schaffen und hat es zumindest bei mir bisher auch immer, selbst bei absichtlicher Deaktivierung. Aber überprüf das einfach mal:
![]() |
Re: Unicode: UTF-16 surrogate pairs?
Zitat:
Danke an euch alle :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz