26

この Unicode 十字記号を書こうとしています () Java の場合:

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

o に線を付けて ( ) と書くことはできますが、十字記号は表示されず、代わりに数字の 5 が出力されます。

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

なんで?

4

4 に答える 4

51

Basic Multilingual Planeの外にある U+10035 を探しています。つまり、 を使用して値を指定することはできません。これは U+0000 から U+ FFFF\uまでしか処理しないためです。つまり、現在は U+1003 ( "MYANMAR LETTER GHA" ) の後に '5' が続きます。\u

残念ながら、Java は、BMP 以外の文字を簡単に表現できる文字列リテラル形式を提供していません。それをリテラルに含める唯一の方法 (ただし ASCII のまま) は、UTF-16 サロゲート ペア形式を使用することです。

String cross = "\ud800\udc35";

または、32 ビットのコード ポイント形式を次のように使用できますint

String cross = new String(new int[] { 0x10035 }, 0, 1);

(これらの 2 つの文字列は等しいです。)

そうは言っても、コンソールはまだそのキャラクターをサポートする必要があります-それを試して、サポートしているかどうかを確認する必要があります.

于 2013-05-17T19:06:40.643 に答える
3

Java は から0x0000までの Unicode 文字を表していると思います0xFFFF。Java は"\u10035"何でも評価し"\u1003"、その後は 5 になります。

于 2013-05-17T19:06:16.937 に答える
1

0x10035 は補助的な Unicode 文字です。プログラムでレンダリングする場合は、それをサポートするフォントが必要です。

http://www.oracle.com/technetwork/articles/javase/supplementary-142654.html

于 2013-05-17T19:24:33.273 に答える