2013-05-17 15 views
25

Ich versuche, dieses Unicode-Kreuz-Symbol () in Java zu schreiben:Wie schreibe ich Unicode-Kreuzsymbol in Java?

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

I o mit einer durchgehenden Linie () ganz gut, aber das Kreuz-Symbol nicht angezeigt schreiben kann, Stattdessen druckt es nur die Nummer 5:

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

Warum?

+1

Der Charakter Sie fragen ist von der Linear-B-Schrift. Willst du das wirklich? Im Allgemeinen werden Sie feststellen, dass Zeichen außerhalb des BMP in allgemeinen Schriftarten nicht häufig verfügbar sind. – parsifal

+1

@parsifal: Ich habe versucht, Unicode-Kunst für Utility-Umfragen am Straßenrand zu machen. – Dog

+1

So etwas wundert mich, habe ich das in meiner eigenen Programmiersprache richtig verstanden? '$ txr -c '@ (bind ein" \ x10035 ")' 'Output: ' a = "" '. Jep! Na sicher; Ich würde keine hexadezimalen Ziffern abschneiden, die willkürlich ein Zeichen bei vier angeben. – Kaz

Antwort

48

Sie suchen nach U + 10035, die außerhalb der Basic Multilingual Plane ist. Das heißt, Sie können \u nicht verwenden, um den Wert anzugeben, da dieser nur U + 0000 bis U + FFFF behandelt - es gibt immer genau vier Hexadezimalziffern nach \u. Du hast also jetzt U + 1003 ("MYANMAR LETTER GHA") gefolgt von '5'.

Leider bietet Java keine String-Literal-Form, die Zeichen außerhalb des BMP einfach zum Ausdruck bringt. Der einzige Weg, um es in einem wörtlichen von einschließlich (aber immer noch in ASCII) ist die UTF-16 surrogate pair Form zu verwenden:

String cross = "\ud800\udc35"; 

Alternativ können Sie die 32-Bit-Codepunkt Form als int verwenden:

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

(Diese beiden Zeichenfolgen sind gleich.)

Nachdem all das gesagt wurde, müsste Ihre Konsole diesen Charakter noch unterstützen - Sie müssen es versuchen, um herauszufinden, ob es das tut oder nicht.

+0

Ich sehe. Wie hast du diese Sequenz von 2 Unicode-Escapes erhalten? Gibt es einen schnellen Weg, um es in meinem Kopf zu tun, während Unicode-String-Literale schreiben? – Dog

+0

@Dog: Um die Wahrheit zu sagen, schrieb ich einige C# -Code - weil in C# kann ich \ U00010035 verwenden :) Lesen Sie den Link Ich habe jetzt für UTF-16 Ersatzpaar enthalten, um zu sehen, warum diese beiden Werte sind zusammen - es liegt an Ihnen zu erarbeiten, ob Sie die Mathematik in Ihrem Kopf tun können, aber ich weiß, ich konnte nicht ... zumindest nicht zuverlässig und schnell;) –

+2

Eine Möglichkeit, verschiedene Kodierungen zu bekommen, ist von FileFormat .info: http://www.fileformat.info/info/unicode/char/10035/index.htm – parsifal

3

Ich glaube, dass Java Unicode-Zeichen von 0x0000 bis 0xFFFF darstellt. Java würde "\u10035" zu was auch immer "\u1003" ist und eine 5 danach bewerten.

0

Unicode-Escapes sind 4 Zeichen lang. Sie drucken \ u1003 gefolgt von "5". Sind Sie sicher, dass Sie den richtigen Codepunkt haben?

+0

Siehe Jon Skeets Antwort zu verstehen, was jenseits der BMP liegt. – Bobulous