Unicode und die Normalform C für UTF-8-kodierte Zeichen
Bei bestimmten Zeichen, die utf-8-kodiert oder als numerische Codereferenz (NCR) in einer HTML-Seite eingebaut sind, gibt der W3.org-Validator eine Warnung aus: Text run is not in Unicode Normalization Form C. Zum Beispiel wenn das Unicode-Zeichen OHM SIGN
, Codepoint 0x2126
als NCR Ω
in die Seite eingebaut wurde. Nun, es gibt 4 Normalformen:
Die kanonische Dekomposition (NFD), die kanonische Dekomposition gefolgt von einer kanonischen Komposition (NFC), die kompatible Dekomposition (NFKD) und die kompatible Dekomposition gefolgt von einer kanonischen Komposition (NFKC).Normalisierung (Wikipedia)
Dazu lesen wir auf Unicode.org:
For loose matching, programs may want to use the normalization forms NFKC and NFKD, which remove compatibility distinctions. These two latter normalization forms, however, do lose information and are thus most appropriate for a restricted domain such as identifiers.
(Für einen losen Abgleich möchten Programme möglicherweise die Normalisierungsformulare NFKC und NFKD verwenden, um Kompatibilitätsunterschiede zu beseitigen. Diese beiden letzteren Normalisierungsformen verlieren jedoch Informationen und sind daher für eine eingeschränkte Domäne wie Identifikatoren am besten geeignet).
Mit dem Perl-Modul Unicode::Normalize
ist es recht einfach diese Empfehlung umzusetzen, bspw. also auf die Normalfom zu prüfen:
use Unicode::Normalize qw(normalize); my $char = pack "U", 0x2126; # OHM SIGN printf "%04X", unpack("U", normalize('NFC', $char)); # 03A9
Die Funktion normalize()
liefert also den Codepoint für das Zeichen in der Normalform C. Beide Zeichen nebeneinander sehen gleich aus, sind jedoch unterschiedliche Zeichen:
Einzelzeichen | Codepoint (hex) | Codepoint (dec) | UTF-8 Oktetten | Unicode Name |
---|---|---|---|---|
Ω | 2126 | 8486 | E2 84 A6 | OHM SIGN |
Ω | 3A9 | 937 | CE A9 | GREEK CAPITAL LETTER OMEGA |
Untenstehende Tabelle zeigt eine Auswahl von Zeichen und deren Normalform C für die Codepoints von 128..10000 (dezimal):
Zeichen | ̀ | Codepoint | U+340 | Zeichen NFC | ̀ | Codepoint NFC | U+300 |
---|---|---|---|---|---|---|---|
Zeichen | ́ | Codepoint | U+341 | Zeichen NFC | ́ | Codepoint NFC | U+301 |
Zeichen | ̓ | Codepoint | U+343 | Zeichen NFC | ̓ | Codepoint NFC | U+313 |
Zeichen | ̈́ | Codepoint | U+344 | Zeichen NFC | ̈ | Codepoint NFC | U+308 |
Zeichen | ʹ | Codepoint | U+374 | Zeichen NFC | ʹ | Codepoint NFC | U+2B9 |
Zeichen | ; | Codepoint | U+37E | Zeichen NFC | ; | Codepoint NFC | U+3B |
Zeichen | · | Codepoint | U+387 | Zeichen NFC | · | Codepoint NFC | U+B7 |
Zeichen | क़ | Codepoint | U+958 | Zeichen NFC | क | Codepoint NFC | U+915 |
Zeichen | ख़ | Codepoint | U+959 | Zeichen NFC | ख | Codepoint NFC | U+916 |
Zeichen | ग़ | Codepoint | U+95A | Zeichen NFC | ग | Codepoint NFC | U+917 |
Zeichen | ज़ | Codepoint | U+95B | Zeichen NFC | ज | Codepoint NFC | U+91C |
Zeichen | ड़ | Codepoint | U+95C | Zeichen NFC | ड | Codepoint NFC | U+921 |
Zeichen | ढ़ | Codepoint | U+95D | Zeichen NFC | ढ | Codepoint NFC | U+922 |
Zeichen | फ़ | Codepoint | U+95E | Zeichen NFC | फ | Codepoint NFC | U+92B |
Zeichen | य़ | Codepoint | U+95F | Zeichen NFC | य | Codepoint NFC | U+92F |
Zeichen | ড় | Codepoint | U+9DC | Zeichen NFC | ড | Codepoint NFC | U+9A1 |
Zeichen | ঢ় | Codepoint | U+9DD | Zeichen NFC | ঢ | Codepoint NFC | U+9A2 |
Zeichen | য় | Codepoint | U+9DF | Zeichen NFC | য | Codepoint NFC | U+9AF |
Zeichen | ਲ਼ | Codepoint | U+A33 | Zeichen NFC | ਲ | Codepoint NFC | U+A32 |
Zeichen | ਸ਼ | Codepoint | U+A36 | Zeichen NFC | ਸ | Codepoint NFC | U+A38 |
Zeichen | ਖ਼ | Codepoint | U+A59 | Zeichen NFC | ਖ | Codepoint NFC | U+A16 |
Zeichen | ਗ਼ | Codepoint | U+A5A | Zeichen NFC | ਗ | Codepoint NFC | U+A17 |
Zeichen | ਜ਼ | Codepoint | U+A5B | Zeichen NFC | ਜ | Codepoint NFC | U+A1C |
Zeichen | ਫ਼ | Codepoint | U+A5E | Zeichen NFC | ਫ | Codepoint NFC | U+A2B |
Zeichen | ଡ଼ | Codepoint | U+B5C | Zeichen NFC | ଡ | Codepoint NFC | U+B21 |
Zeichen | ଢ଼ | Codepoint | U+B5D | Zeichen NFC | ଢ | Codepoint NFC | U+B22 |
Zeichen | གྷ | Codepoint | U+F43 | Zeichen NFC | ག | Codepoint NFC | U+F42 |
Zeichen | ཌྷ | Codepoint | U+F4D | Zeichen NFC | ཌ | Codepoint NFC | U+F4C |
Zeichen | དྷ | Codepoint | U+F52 | Zeichen NFC | ད | Codepoint NFC | U+F51 |
Zeichen | བྷ | Codepoint | U+F57 | Zeichen NFC | བ | Codepoint NFC | U+F56 |
Zeichen | ཛྷ | Codepoint | U+F5C | Zeichen NFC | ཛ | Codepoint NFC | U+F5B |
Zeichen | ཀྵ | Codepoint | U+F69 | Zeichen NFC | ཀ | Codepoint NFC | U+F40 |
Zeichen | ཱི | Codepoint | U+F73 | Zeichen NFC | ཱ | Codepoint NFC | U+F71 |
Zeichen | ཱུ | Codepoint | U+F75 | Zeichen NFC | ཱ | Codepoint NFC | U+F71 |
Zeichen | ྲྀ | Codepoint | U+F76 | Zeichen NFC | ྲ | Codepoint NFC | U+FB2 |
Zeichen | ླྀ | Codepoint | U+F78 | Zeichen NFC | ླ | Codepoint NFC | U+FB3 |
Zeichen | ཱྀ | Codepoint | U+F81 | Zeichen NFC | ཱ | Codepoint NFC | U+F71 |
Zeichen | ྒྷ | Codepoint | U+F93 | Zeichen NFC | ྒ | Codepoint NFC | U+F92 |
Zeichen | ྜྷ | Codepoint | U+F9D | Zeichen NFC | ྜ | Codepoint NFC | U+F9C |
Zeichen | ྡྷ | Codepoint | U+FA2 | Zeichen NFC | ྡ | Codepoint NFC | U+FA1 |
Zeichen | ྦྷ | Codepoint | U+FA7 | Zeichen NFC | ྦ | Codepoint NFC | U+FA6 |
Zeichen | ྫྷ | Codepoint | U+FAC | Zeichen NFC | ྫ | Codepoint NFC | U+FAB |
Zeichen | ྐྵ | Codepoint | U+FB9 | Zeichen NFC | ྐ | Codepoint NFC | U+F90 |
Zeichen | ά | Codepoint | U+1F71 | Zeichen NFC | ά | Codepoint NFC | U+3AC |
Zeichen | έ | Codepoint | U+1F73 | Zeichen NFC | έ | Codepoint NFC | U+3AD |
Zeichen | ή | Codepoint | U+1F75 | Zeichen NFC | ή | Codepoint NFC | U+3AE |
Zeichen | ί | Codepoint | U+1F77 | Zeichen NFC | ί | Codepoint NFC | U+3AF |
Zeichen | ό | Codepoint | U+1F79 | Zeichen NFC | ό | Codepoint NFC | U+3CC |
Zeichen | ύ | Codepoint | U+1F7B | Zeichen NFC | ύ | Codepoint NFC | U+3CD |
Zeichen | ώ | Codepoint | U+1F7D | Zeichen NFC | ώ | Codepoint NFC | U+3CE |
Zeichen | Ά | Codepoint | U+1FBB | Zeichen NFC | Ά | Codepoint NFC | U+386 |
Zeichen | ι | Codepoint | U+1FBE | Zeichen NFC | ι | Codepoint NFC | U+3B9 |
Zeichen | Έ | Codepoint | U+1FC9 | Zeichen NFC | Έ | Codepoint NFC | U+388 |
Zeichen | Ή | Codepoint | U+1FCB | Zeichen NFC | Ή | Codepoint NFC | U+389 |
Zeichen | ΐ | Codepoint | U+1FD3 | Zeichen NFC | ΐ | Codepoint NFC | U+390 |
Zeichen | Ί | Codepoint | U+1FDB | Zeichen NFC | Ί | Codepoint NFC | U+38A |
Zeichen | ΰ | Codepoint | U+1FE3 | Zeichen NFC | ΰ | Codepoint NFC | U+3B0 |
Zeichen | Ύ | Codepoint | U+1FEB | Zeichen NFC | Ύ | Codepoint NFC | U+38E |
Zeichen | ΅ | Codepoint | U+1FEE | Zeichen NFC | ΅ | Codepoint NFC | U+385 |
Zeichen | ` | Codepoint | U+1FEF | Zeichen NFC | ` | Codepoint NFC | U+60 |
Zeichen | Ό | Codepoint | U+1FF9 | Zeichen NFC | Ό | Codepoint NFC | U+38C |
Zeichen | Ώ | Codepoint | U+1FFB | Zeichen NFC | Ώ | Codepoint NFC | U+38F |
Zeichen | ´ | Codepoint | U+1FFD | Zeichen NFC | ´ | Codepoint NFC | U+B4 |
Zeichen | Codepoint | U+2000 | Zeichen NFC | Codepoint NFC | U+2002 | ||
Zeichen | Codepoint | U+2001 | Zeichen NFC | Codepoint NFC | U+2003 | ||
Zeichen | Ω | Codepoint | U+2126 | Zeichen NFC | Ω | Codepoint NFC | U+3A9 |
Zeichen | K | Codepoint | U+212A | Zeichen NFC | K | Codepoint NFC | U+4B |
Zeichen | Å | Codepoint | U+212B | Zeichen NFC | Å | Codepoint NFC | U+C5 |
Zeichen | 〈 | Codepoint | U+2329 | Zeichen NFC | 〈 | Codepoint NFC | U+3008 |
Zeichen | 〉 | Codepoint | U+232A | Zeichen NFC | 〉 | Codepoint NFC | U+3009 |
Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. sos@rolfrost.de.