Es ist keine Nahfeldkommunikation, sondern eine Normalisierungsform der kanonischen Komposition.
Unicode-Normalisierung @ Wikipedia
In Unicode sind Å und Å unterschiedliche Zeichen.
Letzteres riecht zahlenmäßig nach Latin-1. In der Tat scheint es wahr zu sein.
Wenn sich NFC normalisiert, wird der Ongstrom zu A mit einem oberen Ring. Lassen Sie uns dies mit Python überprüfen.
>>> import unicodedata
>>> ord(unicodedata.normalize('NFC', '\N{ANGSTROM SIGN}'))
197
>>> unicodedata.name(unicodedata.normalize('NFC', '\N{ANGSTROM SIGN}'))
'LATIN CAPITAL LETTER A WITH RING ABOVE'
Unicodedata ist ein Standardbibliotheksmodul. Es ist ein Bonus, aber die NFD-Normalisierung, über die manchmal in macOS gesprochen wird, hat 2 Zeichen.
>>> len(unicodedata.normalize('NFD', '\N{ANGSTROM SIGN}'))
2
>>> [ord(ch) for ch in unicodedata.normalize('NFD', '\N{ANGSTROM SIGN}')]
[65, 778]
>>> [unicodedata.name(ch) for ch in unicodedata.normalize('NFD', '\N{ANGSTROM SIGN}')]
['LATIN CAPITAL LETTER A', 'COMBINING RING ABOVE']
Theoretisch kann diese Umwandlung ein Problem sein. Zum Beispiel kann Shift_JIS "Angstrom" ausdrücken, aber nicht "A mit oberem Ring". Wenn Sie Zeichen aus einer im Shift_JIS-Format gespeicherten Textdatei lesen und nach der NFC-Normalisierung erneut versuchen, diese im Shift_JIS-Format zu speichern, können Probleme auftreten.
>>> with open('from.txt', encoding='shift_jis') as fr:
... with open('to.txt', 'w', encoding='shift_jis') as fw:
... fw.write(unicodedata.normalize('NFC', fr.read()))
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
UnicodeEncodeError: 'shift_jis' codec can't encode character '\xc5' in position 0: illegal multibyte sequence
Wenn Sie das Lesen nicht notwendiger Dateien unterlassen
>>> '\N{ANGSTROM SIGN}'.encode('shift_jis')
b'\x81\xf0'
>>> unicodedata.normalize('NFC', '\N{ANGSTROM SIGN}').encode('shift_jis')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'shift_jis' codec can't encode character '\xc5' in position 0: illegal multibyte sequence
Offen gesagt:
>>> '\N{LATIN CAPITAL LETTER A WITH RING ABOVE}'.encode('shift_jis')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'shift_jis' codec can't encode character '\xc5' in position 0: illegal multibyte sequence
Ich habe dieses Beispiel in "Einführung in die Zeichencode-Technologie für Programmierer" gelernt, aber der Grund ist im selben Buch unbekannt ("Aus irgendeinem Grund ist es nicht", S. 353).
Also habe ich zufällig die folgende Beschreibung auf Wikipedia gesehen.
Das Einheitensymbol von Ongström ist dieses Zeichen, aber Unicode und JIS X 0213 definieren es als ein Zeichen, das sich vom ursprünglichen Zeichen unterscheidet. Das Unicode-Ongstrom-Symbol U + 212B ist jedoch ein kompatibles Zeichen, das nur zur Aufrechterhaltung der Abwärtskompatibilität mit älteren Standards verwendet werden kann und für die Verwendung nicht empfohlen wird. (Aus Wikipedia)
Ich verstehe, dass es einen Grund gibt, warum es nur aus Gründen der Abwärtskompatibilität verwendet werden kann.
Alle Unicode-Normalisierungen sind jedoch ziemlich besorgniserregend. Briefe sind schwierig.
Wenn Sie mit einem der beiden Browser im Browser suchen, werden beide als Bonus abgefangen. Ich glaube, ich suche nach der Normalisierung eines der vier Typen. Ich bin nicht sicher, ob der Suchvorgang Spezifikationen hat, die allen Browsern gemeinsam sind.
Wenn hier die einfache Beschwerde eines Endbenutzers erscheint, dass "dieses Zeichen verstümmelt ist", wird es zu "Hallo". Es ist nicht die Angelegenheit eines anderen, da ich mit einem System verbunden bin, in dem CP932, shift_jis und UTF-8 unter Windows verwechselt werden.
Recommended Posts