私はこのユニコードクロスシンボル( ???? )を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
どうして?
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つの文字列は等しいです。)
それでも、コンソールはそのキャラクターをサポートする必要があります-サポートしているかどうかを確認するには試してみる必要があります。
Javaは0x0000
から0xFFFF
までのUnicode文字を表していると思います。 Javaは、"\u10035"
が"\u1003"
であり、その後5であると評価します。
0x10035は、補助的なUnicode文字です。プログラムでレンダリングする場合は、それをサポートするフォントが必要です。
http://www.Oracle.com/technetwork/articles/javase/supplementary-142654.html
Unicodeエスケープの長さは4文字です。\u1003に続いて「5」を印刷しています。正しいコードポイントがありますか?