web-dev-qa-db-ja.com

Javaでユニコードクロスシンボルを書く方法は?

私はこのユニコードクロスシンボル( ???? )を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

どうして?

26
Dog

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

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

String cross = "\ud800\udc35";

または、32ビットのコードポイント形式をintとして使用できます。

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

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

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

49
Jon Skeet

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

3
joshreesjones

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

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

1
Tap

Unicodeエスケープの長さは4文字です。\u1003に続いて「5」を印刷しています。正しいコードポイントがありますか?

0
Aurand