TomC empfiehlt, Unicode-Zeichen auf dem Weg zu dekomprimieren und auf dem Weg nach außen neu zu setzen ( Ссылка ).
Ersteres macht für mich Sinn, aber ich kann nicht verstehen, warum er auf dem Weg nach draußen die Neuzusammensetzung empfiehlt. Möglicherweise können Sie eine kleine Menge Platz sparen, wenn Ihr Text schwer mit europäischen Zeichen mit Akzent ist, aber Sie schieben das nur auf die Zerlegungsfunktion von jemand anderem.
Gibt es noch andere offensichtliche Gründe, die mir fehlen?
Wie Ven'Tatsu in einem Kommentar schreibt, gibt es Software, die zusammengesetzte Zeichen verarbeiten kann, aber keine zerlegten Zeichen. Obwohl das Gegenteil theoretisch auch möglich ist, habe ich es nie in der Praxis gesehen und erwarte es selten.
Um nur ein zerlegtes Zeichen anzuzeigen, muss die Rendering-Software mit der Kombination diakritischer Zeichen umgehen. Es reicht nicht aus, sie in der Schriftart zu finden. Der Renderer muss das Diacritic ordnungsgemäß positionieren und dabei Informationen über die Abmessungen des Basiszeichens verwenden. Es gibt oft Probleme damit, was zu schlechtem Rendering führt - besonders wenn das Rendering das Diakritikum aus einer anderen Schriftart verwendet! Das Ergebnis kann kaum besser sein als das, was man erreicht, wenn man einfach die Glyphe eines vorkompo- nierten Zeichens wie "é" anzeigt, das von einem Typografen entworfen wurde.
(Die Wiedergabesoftware kann auch die Situation analysieren und das zerlegte Zeichen effektiv einem vorkomparierten Zeichen zuordnen. Dies würde jedoch zusätzlichen Code erfordern.)
Es ist ziemlich einfach: Die meisten Werkzeuge haben begrenzte Unicode-Unterstützung; sie nehmen an, dass Zeichen in der NFC-Form sind.
Dies ist zum Beispiel der übliche Vergleich von Zeichenketten:
%Vor%Und natürlich ist das "É" in NFC-Form (da dies fast alles erzeugt), so dass dieses Programm nur Argumente in NFC-Form akzeptiert.
Es würde Dinge wie Texteditoren einfacher machen, da der Endbenutzer erwarten würde, dass ein sichtbares Zeichen ein Zeichen ist, nicht mehrere. Es verhindert auch Probleme mit Systemen, die zerlegte Zeichen nicht als "einzelne" Zeichen behandeln.
Abgesehen davon sehe ich keinen besonderen Vorteil.
Sie sollten eine Normalisierungsform haben, damit alle Daten die gleiche Normalisierung haben, also warum nicht die potenziell kürzere wählen?
Was die Zerlegung eines anderen angeht, denken Sie daran, dass Sie streng sein wollen mit dem, was Sie ausgegeben haben, aber liberal mit dem, was Sie akzeptieren. :)Tom Christiansen ist ein aktiver Teilnehmer an StackOverflow und beantwortet viele Perl-Fragen. Es besteht eine gute Chance, dass er diese Frage beantwortet.
Bestimmte Zeichenfolgen wie ff
können in UTF-8 entweder als zwei Unicode-Zeichen f
und f
oder als einzelnes Unicode-Zeichen ( ff
) dargestellt werden. Wenn Sie Ihre Zeichen zerlegen, machen Sie Dinge wie ff
zu zwei separaten Zeichen, die für die Sortierung wichtig wären. Sie möchten, dass beim Sortieren zwei separate Buchstaben f
angezeigt werden.
Wenn Sie UTF-8 f
und f
neu zusammensetzen, kehren sie zu dem einzelnen UTF-8-Zeichen zurück, das für die Anzeige wichtig ist (Sie wollen es schön formatieren) und für die Bearbeitung (Sie möchten es bearbeiten) als einzelnes Zeichen).
Leider fällt meine Theorie mit Dingen wie dem Spanischen auseinander. Dies wird als U + 00F1 als einzelnes Zeichen dargestellt und zerfällt in U + 006E (n) und U + 0303 (in Place ~). Vielleicht hat Perl die Logik eingebaut, um mit dieser Art von zwei UTF-8-Dekompositionszeichen umzugehen.