Warum wird 'U +' verwendet, um einen Unicode-Codepunkt zu kennzeichnen?

75

Warum werden Unicode-Codepunkte als angezeigt?U+<codepoint>

Stellt beispielsweise U+2202das Zeichen ∂ dar .

Warum nicht U-(Bindestrich oder Bindestrich) oder irgendetwas anderes?

DavidRR
quelle

Antworten:

128

Die Zeichen "U +" sind eine ASCII-bezogene Version des MULTISET UNION "⊎" U + 228E-Zeichens (das U-ähnliche Vereinigungssymbol mit einem Pluszeichen), das Unicode als Vereinigung von Zeichensätzen symbolisieren sollte. Siehe Kenneth Whistlers Erklärung in der Unicode-Mailingliste .

Jukka K. Korpela
quelle
14

Der Unicode-Standard benötigt eine Notation, um über Codepunkte und Zeichennamen zu sprechen. Es übernahm die Konvention von "U +", gefolgt von vier oder mehr hexadezimalen Ziffern, mindestens bis zu The Unicode Standard , Version 2.0.0 , veröffentlicht 1996 (Quelle: archivierte PDF-Kopie auf der Unicode Consortium-Website).

Die Notation "U +" ist nützlich. Es bietet eine Möglichkeit, hexadezimale Ziffern als Unicode-Codepunkte anstelle von Oktetten oder uneingeschränkten 16-Bit-Mengen oder Zeichen in anderen Codierungen zu markieren. Es funktioniert gut beim Ausführen von Text. Das "U" schlägt "Unicode" vor.

Meine persönliche Erinnerung an die Diskussionen der Softwareindustrie Anfang der 90er Jahre über Unicode ist, dass eine Konvention von "U +" gefolgt von vier hexadezimalen Ziffern während der Ära von Unicode 1.0 und Unicode 2.0 üblich war. Zu dieser Zeit wurde Unicode als 16-Bit-System angesehen. Mit dem Aufkommen von Unicode 3.0 und der Codierung von Zeichen an Codepunkten von U + 010000 und höher wurde die Konvention von "U-" gefolgt von sechs hexadezimalen Ziffern verwendet, um insbesondere die zusätzlichen zwei Ziffern in der Zahl hervorzuheben. (Oder vielleicht war es umgekehrt, eine Verschiebung von "U-" zu "U +".) Nach meiner Erfahrung ist die "U +" - Konvention jetzt viel häufiger als die "U-" Konvention, und nur wenige Leute verwenden die Differenz zwischen "U +" und "U-", um die Anzahl der Ziffern anzugeben.

Ich konnte jedoch keine Dokumentation der Verschiebung von "U +" zu "U-" finden. Archivierte Mailinglistennachrichten aus den 90er Jahren sollten Beweise dafür haben, aber ich kann nicht bequem auf welche verweisen. Der Unicode-Standard 2.0 erklärte: "Unicode-Zeichencodes haben eine einheitliche Breite von 16 Bit." (S. 2-3). Es legte seine Konvention fest, dass "ein einzelner Unicode-Wert als U + nnnn ausgedrückt wird , wobei nnnn eine vierstellige Zahl in hexadezimaler Notation ist" (S. 1-5). Ersatzwerte wurden zugewiesen, aber über U + FFFF wurden keine Zeichencodes definiert, und UTF-16 oder UTF-32 wurden nicht erwähnt. Es wurde "U +" mit vier Ziffern verwendet. Der Unicode-Standard 3.0.0, veröffentlicht im Jahr 2000, definierte UTF-16 (S. 46-47) und diskutierte Codepunkte von U + 010000 und höher. Es wurde "U +" mit vier Ziffern an einigen Stellen und mit sechs Ziffern an anderen Stellen verwendet. Die festeste Spur, die ich gefunden habe, war in The Unicode Standard , Version 6.0.0 , wo eine Tabelle mit BNF-Syntaxnotation Symbole U+HHHHund U-HHHHHHHH(S. 559) definiert.

Die "U +" - Notation ist nicht die einzige Konvention zur Darstellung von Unicode-Codepunkten oder Codeeinheiten. Beispielsweise definiert die Python-Sprache die folgenden Zeichenfolgenliterale :

  • u'xyz' um eine Unicode-Zeichenfolge anzugeben, eine Folge von Unicode-Zeichen
  • '\uxxxx' um eine Zeichenfolge mit einem Unicode-Zeichen anzugeben, das durch vier hexadezimale Ziffern gekennzeichnet ist
  • '\Uxxxxxxxx' um eine Zeichenfolge mit einem Unicode-Zeichen anzugeben, das durch acht hexadezimale Ziffern gekennzeichnet ist
Jim DeLaHunt
quelle
Danke für diese Erklärung @Jim. Es ist wirklich hilfreich. Ich würde mir diese verknüpften Dokumente ansehen.
Senthil Kumaran
1
unicode.org/mail-arch/unicode-ml/y2005-m11/0060.html unterstützt auch U + HHHH und U-HHHHHHHH.
Shawn Kovac
8

Dies hängt davon ab, von welcher Version des Unicode-Standards Sie sprechen. Aus Wikipedia :

Ältere Versionen des Standards verwendeten ähnliche Notationen, jedoch mit leicht unterschiedlichen Regeln. Beispielsweise verwendete Unicode 3.0 "U-" gefolgt von acht Ziffern und erlaubte, dass "U +" nur mit genau vier Ziffern verwendet wurde, um eine Codeeinheit und keinen Codepunkt anzuzeigen.

Sean Bright
quelle
Das war die hilfreiche Referenz. Der Grund für diese Änderung wird jedoch nicht erwähnt. War es nur eine Laune des Komitees?
Senthil Kumaran
2
Ich sehe die "U-" Konvention weder in The Unicode Standard 3.0.0 noch in The Unicode Standard 2.0.0, wie auf der Website des Unicode Consortium archiviert. Ich denke, Wikipedia ist hier falsch.
Jim DeLaHunt
1
Es befindet sich im Vorwort ( unicode.org/versions/Unicode3.0.0/Preface.pdf ), wird aber nur kurz erwähnt.
Sean Bright
4

Es ist nur eine Konvention, um zu zeigen, dass der Wert Unicode ist. Ein bisschen wie '0x' oder 'h' für Hex-Werte ( 0xB9oder B9h). Warum 0xB9und nicht 0hB9(oder &hB9oder $B9)? Nur weil die Münze so geworfen wurde :-)

Mihai Nita
quelle
1
Sie haben nicht einmal eine Münze zu werfen haben: x( /ˈɛks/) klingt eher hexals h( /eɪtʃ/) der Fall ist.
Frédéric Hamidi
1
@ FrédéricHamidi aber VB verwendet &hB9, Pascal verwendet $B9, Intel Syntax Assembly verwendet0B9h
phuclv
Danke phuclv :-) Ja, die Beispiele waren nicht zufällig :-)
Mihai Nita