2009-12-21 13 views

Antwort

7

Java-Zeichenfolgen sind UTF-16 (Big-Endian), daher kann ein Unicode-Codepunkt aus einem oder zwei Zeichen bestehen. Unter dieser Codierung kann Java den Codepunkt U + 1D50A (MATHEMATISCHER FRAKTUR CAPITAL G) mit den Zeichen 0xD835 0xDD0A (String literal "\uD835\uDD0A") darstellen. Die Klasse Character bietet Methoden zum Konvertieren in/aus Codepunkten.

// Unicode code point to char array 
char[] math_fraktur_cap_g = Character.toChars(0x1D50A); 
+0

Warum verwenden wir nicht 'int' type' math_fraktur_cap_g', um Ersatzpaare von Nicht-BMP zu lesen? wie erwähnt [hier] (https://stackoverflow.com/a/13112474/3317808) – overexchange

13

http://en.wikipedia.org/wiki/UTF-16

In computing, UTF-16 (16-Bit- UCS/Unicode Transformation Format) ist eine variabler Länge Zeichencodierung für Unicode, der fähig ist, codierend die gesamten Unicode Repertoires. Das Codierungsformular bildet jedes Zeichen in eine Folge von 16-Bit-Wörtern ab. Die Zeichen sind als Codepunkte bekannt und die 16-Bit-Wörter werden als Code-Einheiten bezeichnet. Für Zeichen in der Basic Multilingual Plane (BMP) ist die resultierende Codierung ein einzelnes 16-Bit-Wort. Für Zeichen in den anderen Ebenen wird die Codierung zu einem Paar 16-Bit-Wörtern führen, die zusammen als Ersatzpaar bezeichnet werden. All möglicher Code Punkte von U + 0000 bis U + 10FFFF, mit Ausnahme des Surrogat-Code-Punkte U + D800-U + DFFF (die nicht Zeichen), ist eindeutig durch UTF-16, unabhängig von dem Codepunkt des kartiert aktuelle oder zukünftige Zeichenzuweisung oder verwenden.

+0

Und siehe meine vorherige Antwort in SO für, wie man korrekt über alle Zeichen in einer Java-Schnur iteriert. http://stackoverflow.com/questions/1527856/how-can-i-iterate-through-the-unicode-codepoints-of-a-java-string/1527891#1527891 –

3

Java verwendet UTF-16 für Strings - bedeutet im Wesentlichen, dass Zeichen variable Breite haben. Die meisten von ihnen passen in 16 Bit, aber diejenigen außerhalb Basic Multilingual Pane belegen 32 Bit. Es ist dem UTF-8-Schema sehr ähnlich.