Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Versteht hier jemand Unicode? (https://www.delphipraxis.net/156869-versteht-hier-jemand-unicode.html)

Luckie 18. Dez 2010 07:17

Versteht hier jemand Unicode?
 
Also ich dachte, ich beschäftige mich mal etwas mit Unicode. Ich habe mir dazu die entsprechenden Wikipedia Artikel rausgesucht (UTF-8, UTF-16, UTF-32) und bin zu dem Schluss gekommen, wie kann ein menschliches Gehirn so etwas produzieren?

UTF-32 ist ja kein Problem, da ist jedes Zeichen mit vier Byte kodiert. Also analog zu ASCII mit einem Byte. OK, verstanden. Aber bei UTF-8 und 16 hat es dann bei mir ausgesetzt. Versteht das einer von euch und kann das in klar verständlichen, einfachen Worten erklären? Ich kann es nicht.

Matze 18. Dez 2010 07:25

AW: Versteht hier jemand Unicode?
 
Zitat:

Zitat von Luckie (Beitrag 1069199)
Aber bei UTF-8 und 16 hat es dann bei mir ausgesetzt. Versteht das einer von euch und kann das in klar verständlichen, einfachen Worten erklären? Ich kann es nicht.

Was verstehst du denn genau nicht? Anhand der ersten 1 - 2 Bits jedes Bytes kannst du herausfinden, ob es ein Start-Byte oder ein Folgebyte ist (ähnlich einer Art Header, der pro Byte verwendet wird). Siehe hier. Somit kannst du anhand dieser 1 - 2 Bits jedes Bytes abfragen, ob ein neues Zeichen beginnt oder ob das Byte noch zum alten Zeichen gehört.

Als Vorteil vermute ich eine geringere Größe des Texts, sofern z.B. nur ASCII-Zeichen verwendet werden. Sonst wäre der Text 4 x so groß beim gleichen Informationsgehalt.

Luckie 18. Dez 2010 07:36

AW: Versteht hier jemand Unicode?
 
Genau die verlinkte Tabelle hat mich verwirrt. Also wenn das Byte mit 0 anfängt ist das Zeichen auch in dem Byte kodiert. Fängt das Byte mit 11 an ist es das Startbyte und es gibt noch ein Folgebyte. Das oder die Folgebyte(s) fangen immer mit 10 an. Die Anzahl der Einsen am Anfang den Startbytes geben die Anzahl der Bytes an mit dem ein Zeichen kodiert ist. Also 111 bedeutet, dass es das Startbyte ist und noch zwei Folgebytes kommen. Dabei sind die Einsen immer mit einer null von den andern Bits, die das Zeichen kodieren, abgetrennt.
Beispiel: 110xxxxx 10xxxxxx oder 1110xxxx 10xxxxxx 10xxxxxx.

Kann man das so zusammenfassen? Wenn ja habe ich UTF-8 schon mal verstanden. Bleibt noch UTF-16.

Matze 18. Dez 2010 07:51

AW: Versteht hier jemand Unicode?
 
So steht's zumindest auf Wikipedia. Wenn das stimmt, was dort steht, hast du es schön kurz zusammengefasst und es passt, würde ich sagen.

Die PDF zu UTF-16 ist mir zu umfangreich, um sie mal eben durchzulesen. Wie UTF-16 funktioniert, kann ich dir nicht sagen. Ich habe es selbst auch nie verwendet.

Luckie 18. Dez 2010 07:55

AW: Versteht hier jemand Unicode?
 
UTF-16 kommt heute Nachmittag dran. ;)

himitsu 18. Dez 2010 09:38

AW: Versteht hier jemand Unicode?
 
Delphi-Referenz durchsuchenIsLeadByte

Außerdem ist UTF-8 doch recht einfach?
7. Bit nicht gesetzt (... and $80 = 0) = entspricht ASCII
7. Bit gestzt (... and $80 <> 0), es handelt sich um einen Teil von was Kodiertem
7. und 6. Bit gesetzt (... and $C0 = $C0) = Führungsbyte / Leading Byte
7. gesetzt und 6. nicht (... and $C0 = $80) = Folgebyte / Trailing Byte

Und die Anzahl der führenden Bits, des Führungsbytes, natürlich gefollgt von einem 0-Bit, gibt die Anzahl der Bytes in der Gruppe an (oder man nimmt einfach nur die nachfolgenen Folgebytes dazu und prüft nur auf dessen Muster).

http://de.wikipedia.org/wiki/UTF-8#Kodierung

PS: Das Unicode in Delphi/Windows entspricht dem UTF-16.

Matze 18. Dez 2010 09:39

AW: Versteht hier jemand Unicode?
 
Zitat:

Zitat von himitsu (Beitrag 1069213)
Außerdem ist UTF-8 doch recht einfach?

Das hat Michael längst verstanden, wie den vergangenen Beiträgen zu entnehmen ist. :tongue:

Aber du bist doch Unicode-Experte. Erkläre mal, wie UTF-16 funktioniert. ;)

himitsu 18. Dez 2010 10:06

AW: Versteht hier jemand Unicode?
 
Wenn du diese blöden Surrogate-Pairs ignorierst, dann ist UTF-16 quasi uncodiert und man kann die Werte der Words/Chars direkt verwenden. :angle2:

Assarbad 18. Dez 2010 12:49

AW: Versteht hier jemand Unicode?
 
Zitat:

Zitat von himitsu (Beitrag 1069219)
Wenn du diese blöden Surrogate-Pairs ignorierst, dann ist UTF-16 quasi uncodiert und man kann die Werte der Words/Chars direkt verwenden. :angle2:

Aber genau das kann man nicht mehr machen, seitdem Unicode mehr als 64k Zeichen enthält. Was du meinst ist UCS-2 (wie es von NT anfangs unterstützt wurde).

Aber stimmt schon. In den meisten Fällen mit denen wir es zu tun bekommen werden, wird die in UCS-2 getroffene Annahme 16bit == 1 Kodepunkt schon stimmen.

Ansonsten gibt es ein feines Buch von O'Reilly zum Thema. Kann es empfehlen.

himitsu 18. Dez 2010 13:05

AW: Versteht hier jemand Unicode?
 
Es kommt drauf an, wenn man eh nicht viel macht und die SurrogatePairs wie "normale" Zeichen behandelt und sie nicht anfaßt/verändert, dann kann doch eigentlich nichts passieren.
Selbst Delphi-Referenz durchsuchenPos würde es nicht interessieren, solange man da nur nach Nicht-SurrogatePairs sucht, oder zumindestens nur komplette Surrogate-Paare sucht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Seite 1 von 3  1 23      

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