2016-04-27 23 views
0

Ich kann Unicode-Zeichen in Java nicht verwenden. Ich habe den Baum Unicode in und es kommt nur als kleine Box und ein 4. Es ist in einem Applet ist, und ich habe den Code in public void paint (Graphics g) ohnehin den Code unten istUnicode-Zeichen Java

g.drawString("\u1F334",150,150); 
+1

Verwenden Sie eine Schriftart, die dieses Zeichen unterstützt? – BackSlash

+1

Ist das, was Sie versuchen, dieses Zeichen anzuzeigen: http://unicode-table.com/en/1F33/, gefolgt von '4'? – Berger

+0

@Berger http://unicode-table.com/de/1F334/ – BackSlash

Antwort

2

von JLS 3.3:

Ein Compiler für die Java-Programmiersprache ("Java-Compiler") zuerst erkennt Unicode in seinem Eingang entkommt, übersetzte die ASCII-Zeichen u durch vier hexadezimale Ziffern auf die UTF-16 Code-Einheit gefolgt \ (§3.1) für den angegebenen hexadezimalen Wert, und alle anderen Zeichen unverändert lassen. Für die Darstellung zusätzlicher Zeichen sind zwei aufeinanderfolgende Unicode-Escapes erforderlich.

(Hervorhebung hinzugefügt)

Insbesondere müssen Sie die UTF-16 BE (Big Endian) Codierung. Für die Palme ist die Sequenz (wie angegeben on the page you linked) "\uD83C\uDF34".

+1

Die feste Anzahl von Hex-Zeichen erscheint logisch, in Frankreich zum Beispiel wollen wir nicht "n \ u00e9ant" als "n ບ nt" drucken lassen "Was wir wollen, ist" neant ". – Berger

0

Der Unicode Codepunkt U + 1F334 steht für ein "Zeichen" außerhalb des Java Char-Bereichs. Java verwendet die UTF-16-Unicode-Codierung mit 16 Bits für ein Zeichen. Und U + 1F334 geht in den 3-Byte-Bereich.

können Sie tun:

int[] codepoints = { 0x1F334 }; 
String emoji = new String(codepoints, 0, codepoints.length); 

Dies wird ein String mit einem Paar von Zeichen ergeben, obwohl das entweichende Format UTF-16 verwendet wird, und nicht etwas Einfaches wie \u1F33\u0004 (falsch).

jedoch, wenn die Schrift nicht, dass Unicode-Zeichen darstellen kann, erhalten Sie eine kleine Box, jetzt mit den sechs Ziffern 01F/334.

Font font = ... 
if (!font.canDisplay(0x1F334)) { 
    s = s.replace(emoji, " :) "); 
} 

Es ist unwahrscheinlich, dass jeder Browser eine vollständige Unicode-Schriftart zur Verfügung hat. Sie könnten Swings HTML-Funktionalität ausprobieren und ein eingebettetes Bild in einem HTML JTextPane oder ähnlichem verwenden.

+0

Das hat nicht funktioniert ... Es muss in einem Java Applet sein ... –

+0

Ein ** JApplet ** kann ** swing **, ein ** Applet ** nur ** awt **. Natürlich können Sie 'g.drawString' und möglicherweise' g.drawImage' verwenden, wenn Sie sich für ein Bild i.o. Text. –

+0

Um ehrlich zu sein, wie ein normaler Benutzer wird nicht eine vollständige Unicode-Schriftart haben, wird es schwer sein. Auch Applets können aus Browsern verschwinden, wie das Java-Browser-Plugin. Bei der Schriftart könnten Sie versuchen, Ihre eigene Schriftart in HTML/CSS zu übergeben, damit Sie sie im Applet beziehen können. Ob das alles funktioniert ... –