15

Javaでcharを使用してU + FFFFを超えるUnicode文字を表示するにはどうすればよいですか?

次のようなものが必要です(有効な場合):

char u = '\u+10FFFF';
4

4 に答える 4

22

char(UTF-16コードユニットを保持する)単一ではできませんが、次を使用できますString

// This represents U+10FFFF
String x = "\udbff\udfff";

または:

String y = new StringBuilder().appendCodePoint(0x10ffff).toString();

これはサロゲート ペア(2 つの UTF-16 コード単位が組み合わさって、基本多言語面を超えた単一の Unicode コード ポイントを形成します) です。もちろん、それに対処するには、データを表示するものも必要です...

于 2012-03-23T06:26:32.997 に答える
8

を使用する代わりに、クラスStringBuilderで直接見つかった関数を使用することもできます。Character機能は toChars()あり、次の仕様があります。

指定された文字 (Unicode コード ポイント) を、配列
に格納されている UTF-16 表現に変換します。char

したがって、サロゲート ペアがどのように見えるかを正確に知る必要はなく、コード ポイントを直接使用できます。コード例は次のようになります。

int ch = 0x10FFFF;
String s = new String(Character.toChars(ch));

コード ポイントのデータ型は であり、 ではintないことに注意してくださいchar

于 2016-10-23T15:56:39.817 に答える
1

Unicode 文字は 2 バイトを超える場合があり、通常は 1 つの文字に保持できません。

于 2012-03-23T06:27:46.830 に答える
1

ソース

char データ型は、文字を固定幅の 16 ビット エンティティとして定義した元の Unicode 仕様に基づいています。有効なコード ポイントの範囲は、Unicode スカラー値として知られる U+0000 から U+10FFFF になりました。

U+0000 から U+FFFF までの文字セットは、Basic Multilingual Plane (BMP) と呼ばれることがあります。コード ポイントが U+FFFF より大きい文字は補助文字と呼ばれます。Java 2 プラットフォームは、char 配列と String および StringBuffer クラスで UTF-16 表現を使用します。この表現では、補助文字は char 値のペアとして表されます。最初は高サロゲート範囲 (\uD800-\uDBFF) から、2 番目は低サロゲート範囲 (\uDC00-\uDFFF) からです。

したがって、char 値は、サロゲート コード ポイントを含む Basic Multilingual Plane (BMP) コード ポイント、または UTF-16 エンコーディングのコード単位を表します。int 値は、補助コード ポイントを含むすべての Unicode コード ポイントを表します。int の下位 (最下位) 21 ビットは Unicode コード ポイントを表すために使用され、上位 (最上位) 11 ビットはゼロでなければなりません。特に指定がない限り、補助文字と代理文字値に関する動作は次のとおりです。

  • char 値のみを受け入れるメソッドは、補助文字をサポートできません。サロゲート範囲からの char 値を未定義の文字として扱います。たとえば、Character.isLetter('\uD840') は false を返しますが、この特定の値の後に文字列内の下位サロゲート値が続くと文字を表すことになります。

  • int 値を受け入れるメソッドは、補助文字を含むすべての Unicode 文字をサポートします。たとえば、Character.isLetter(0x2F81A) は、コード ポイント値が文字 (CJK 表意文字) を表すため、true を返します。

J2SE API ドキュメントでは、Unicode コード ポイントは U+0000 ~ U+10FFFF の範囲の文字値に使用され、Unicode コード単位は UTF-16 エンコーディングのコード単位である 16 ビット char 値に使用されます。

于 2012-03-23T06:47:19.177 に答える