2013-05-17 11 views
25

私はJavaでこのユニコードのクロス記号()を書き込むしようとしています:JavaでUnicodeの十字記号を書くには?

class A { 
    public static void main(String[] args) { 
     System.out.println("\u2300"); 
     System.out.println("\u10035"); 
    } 
} 

、私はそれを通る線()とoをうまく書くことができますが、クロスのシンボルが表示されません代わりに番号5が表示されます:

# javac A.java && java A 
⌀ 
ဃ5 

なぜですか?

+1

について、あなたは求めている文字は、リニア-Bスクリプトからです。それは本当にあなたが望むものですか?一般的に、BMP以外の文字は汎用フォントでは利用できないことがよくあります。 – parsifal

+1

@parsifal:私は路傍のユーティリティ調査のためのユニコードアートを作ろうとしていました。 – Dog

+1

このようなことが私には不思議に思えますが、私は自分のプログラミング言語でこの権利を得ましたか? '$ txr -c '@(" \ x10035 "をバインド)''出力: 'a =" "'うん!もちろん;私は任意に4で文字を指定する16進数を切り捨てません。 – Kaz

答えて

48

あなたはBasic Multilingual Planeの外にあるU + 10035を探しています。つまり、\uを使用して値を指定することはできません。これは、U + 0000〜U + FFFFのみを扱うためです。常に\uのあとにの4桁の16進数があります。現在、U + 1003("MYANMAR LETTER GHA")に「5」が続いています。

残念ながら、JavaはBMP以外の文字を簡単に表現できる文字列リテラル形式を提供していません。

String cross = new String(new int[] { 0x10035 }, 0, 1); 
:あなたは intとして32ビットコードポイントフォームを使用することができ、あるいは

String cross = "\ud800\udc35"; 

:(まだASCIIで)リテラルに含めるの唯一の方法は、UTF-16 surrogate pairフォームを使用することです

(これらの2つの文字列は同じです)

あなたのコンソールはまだそのキャラクターをサポートする必要があります - あなたはそれがそうであるかどうかを調べるためにそれを試す必要があります。

+0

です。どのようにしてこの2つのユニコードエスケープシーケンスを取得しましたか?ユニコードの文字列リテラルを書いている間に、私の頭の中でそれをすばやく行う方法はありますか? – Dog

+0

@Dog:真実を伝えるために、私はC#コードを書いた。なぜなら、C#では '\ U00010035'を使うことができるからだ。私は今、" UTF-16サロゲートペア "に含まれているリンクを読んで、あなたが頭の中で数学をすることができるかどうかは、あなたが決めるのはあなた次第だが、私は...少なくとも確実で素早くはできないことを知っている;) –

+2

さまざまなエンコーディングを得る1つの方法はFileFormat .info:http://www.fileformat.info/info/unicode/char/10035/index.htm – parsifal

3

Javaは、0x0000から0xFFFFまでのUnicode文字を表します。 Javaは"\u10035""\u1003"と評価し、その後は5と評価します。

0

ユニコードエスケープは4文字です。あなたは\ u1003に続いて '5'を印刷しています。あなたは正しいコードポイントを持っていると確信していますか?

+0

Jon Skeetの答えを参照して、BMPを超えたものを理解してください。 – Bobulous

関連する問題