Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Unicode Windows < Unicode (https://www.delphipraxis.net/118106-unicode-windows-unicode.html)

Dezipaitor 31. Jul 2008 17:20


Unicode Windows < Unicode
 
hi

Das Problem beschäftigt mich schon lange. Wie jeder vllt heutzutage weiß, gibt es mittlerweile Unicode. Es ermöglicht eine Menge mehr Zeichen darzustellen. Dafür gibt es die UTF-x Formen, wobei x eine Zahl, wie 8, 16, 32 darstellt und die Bitgröße eines Zeichens angibt. UTF-8 ist dagegen variabel und kann je nach Zeichen im String unterschiedliche Platzbedürfnisse haben. Dafür ist es sehr platzsparsam.
Seit Windows NT ist Unicode in der API enthalten. Was nicht jeder weiß ist, dass MS sich damals für UTF-16 entschieden hat. Das macht dann etwa 65000 Zeichen, was damals jeder Programmierer für ausreichend erachtet hat, um alle Sprachen der Welt locker unterzubringen (siehe Charles Petzold Windows Programmierung). Heute haben wir über 100.000 Zeichen über Unicode zugeordnet und es werden immer mehr.
Mittlerweile ist UTF-8 wohl für die meisten InternetBrowser zum Standard geworden, wenn man Wikipedia/Unicode Glauben schenken darf.

Nun die Frage:
Wie schaffen es Windowsbrowser UTF-8 darzustellen, wenn z.b. die Win32-API DrawTextW-Funktion und Andere nur UTF-16 können? Ich muss darauf Aufmerksam machen, dass die Unterstützung von UTF-8 bedeutet, dass es auf jeden Fall möglich ist Zeichen jenseits der Nummer 65000 darzustellen!
D.h. eine Anwendung, die UTF-8 unterstützt kann nicht DrawTextW verwenden, da ein Zeichen mit der Nummer 100.000 falsch dargestellt werden würde.
Also wie funktioniert dies programmatisch?

Mich würde es auch interessieren, ob Linux nativ schon UTF-8 darstellen kann.

THX

PS.
Delphi unterstützt nur UTF-16. IMHO wohl solange bis Windows UTF-8 nativ beherscht. Also altägyptisch wird man lange nicht sehen können. :D

Dax 31. Jul 2008 17:27

Re: Unicode Windows < Unicode
 
UTF-16 verfügt über sogenannte surrogate pairs, mit denen man mehr darstellen kann als 65k:
Zitat:

Zitat von http://de.wikipedia.org/wiki/UTF-16
Unicode-Zeichen außerhalb der BMP (d.h. U+10000 bis U+10FFFF), werden durch zwei 16-Bit-Wörter (engl. code units) dargestellt, die wie folgt gebildet werden [...]

edit:
Zitat:

Zitat von Dezipaitor
Mich würde es auch interessieren, ob Linux nativ schon UTF-8 darstellen kann.

Ich habe hier eine en-UTF8-locale, also wahrscheinlich ja.
Vermutung wohl bestätigt:
Zitat:

Zitat von http://www.cl.cam.ac.uk/~mgk25/unicode.html
UTF-8 is the way in which Unicode is used under Unix, Linux, and similar systems.


Bernhard Geyer 31. Jul 2008 21:49

Re: Unicode Windows < Unicode
 
AFAIK wird auf API-Seite bis NT 4.0 (oder wars W2K) UCS2 verwendet und ab der nächsten Version UTF-16 so das auch klingonisch kein Problem darstellt.

Dezipaitor 31. Jul 2008 21:53

Re: Unicode Windows < Unicode
 
Oh danke, UCS2 auf Wikipedia schreibt was wirklich Interessantes dazu
http://de.wikipedia.org/wiki/UCS2


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 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