2011-01-08 7 views
4

Javaコードでいくつかのファンキーな文字を使用しようとしています。Javaで乱雑な文字を初期化する

Character c = new Character(''); 

(Webブラウザがhereから取られたとして、それは、「1F000麻雀牌EAST WIND」ですが、文字が表示されない場合。Javaは「は無効な文字定数」について不平を言う

。与えますか?私は、 Javaの文字はUnicodeをサポート思った。

また、そのUnicode値によって文字を初期化する方法はありますか?new Character('0x01F000')ような何か?

+0

私はわからないんだけど、私それはあなたがやっていることに影響しますが、Java 6がUnicode 4に書き込まれていることに注意してください。_Some_メソッドはU + 1F000を未定義のコードポイントとして扱います。 – McDowell

答えて

6

非BMP(基本多言語面)の文字ができませんchar(つまり、Character)と表現すると、charは16ビットの符号なし整数にすぎないためです。非BMP文字は、Javaでサロゲートペアを使用して表されます。

文字列を使用する必要があります。でも、それでもサロゲート文字のペアを明示的に指定する必要があると思われます。 C#には\uと同等のエスケープシーケンス\Uがありますが、32ビット値には対応していますが、Javaにはそのようなものはありません:(

コード内でUnicode値を直接使用できる代替方法があります。

String x = new String(new int[] { 0x1f000 }, 0, 1); 

それは醜いですが、それは動作します...

+0

@Jon - 正しいですが、Javaは '\ U'をサポートしていません:http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.1 – McDowell

+0

@McDowell:ありがとうございます。答えから疑問の要素を削除します:) –

+0

Ehm。 Javaの文字列リテラルは '\ u'エスケープを可能にするので、この文字は単純に' String s = "\ u1f000"; "ここで実際に起こっていることは、その特定の文字がUnicode 6.0コードページにあるので、 Unicode 6.0のサポートはJDK7で追加されているため、Javaではサポートされていません。 – Esko

3

だけで代替しますが、使用することができます。

String str = new String(Character.toChars(0x1F000)); 
+1

あなたは 'String str =" \ ud83c \ udc00 ";'を使うこともできますが、これはコードポイントを難読化します。 – McDowell

+0

@mcdあなたは当然のことですが、私はCharacterクラスにサロゲートペアへの翻訳を重くするようにしたいと思っています:) –

関連する問題