Ich möchte ein Unicode-Zeichen in Java anzeigen. Wenn ich das mache, funktioniert es einwandfrei:
String symbol = "\u2202";
Symbol ist gleich "∂". Das ist, was ich will.
Das Problem ist, dass ich die Unicode-Nummer kenne und daraus das Unicode-Symbol erstellen muss. Ich habe (für mich) das Offensichtliche versucht:
int c = 2202;
String symbol = "\\u" + c;
In diesem Fall ist das Symbol jedoch gleich "\ u2202". Das will ich nicht.
Wie kann ich das Symbol erstellen, wenn ich seine Unicode-Nummer kenne (aber nur zur Laufzeit --- ich kann es nicht wie im ersten Beispiel fest codieren)?
Antworten:
Wirf einfach deine
int
zu einemchar
. Sie können das in einString
using konvertierenCharacter.toString()
:BEARBEITEN:
Denken Sie daran, dass sich die Escape-Sequenzen im Java-Quellcode (die
\u
Bits) in HEX befinden. Wenn Sie also versuchen, eine Escape-Sequenz zu reproduzieren, benötigen Sie so etwas wieint c = 0x2202
.quelle
c
Voraus absolut sicher sein, dass Ihr Wert kleiner als 0x10000 ist, sonst wird dieser Ansatz schrecklich brechen.Java chars go up to 0xFFFF
. Ich wusste das nicht.Wenn Sie eine UTF-16-codierte Codeeinheit als erhalten möchten
char
, können Sie die Ganzzahl analysieren und wie von anderen vorgeschlagen in sie umwandeln .Wenn Sie alle Codepunkte unterstützen möchten, verwenden Sie
Character.toChars(int)
. Dies behandelt Fälle, in denen Codepunkte nicht in einen einzelnenchar
Wert passen .Doc sagt:
quelle
char
.scala> "👨🎨".map(_.toInt).flatMap((i: Int) => Character.toChars(i)).map(_.toHexString)
gibtres11: scala.collection.immutable.IndexedSeq[String] = Vector(f468, 200d, f3a8)
Dieses Emoji, "männlicher Sänger", wird mit den drei Codepunkten angesprochenU+1f468
,U+200d
undU+1f3a8
. Die höchstwertige Ziffer fehlt. Ich kann es mit einem bitweisen ODER hinzufügen ( stackoverflow.com/a/2220476/1007926 ), weiß aber nicht, wie ich feststellen soll, welche analysierten Zeichen abgeschnitten wurden. Vielen Dank!Die anderen Antworten hier unterstützen entweder nur Unicode bis U + FFFF (die Antworten, die sich nur mit einer Instanz von char befassen) oder geben nicht an, wie zum eigentlichen Symbol zu gelangen ist (die Antworten, die bei Character.toChars () enden oder eine falsche Methode verwenden) danach), also füge auch hier meine Antwort hinzu.
Um auch zusätzliche Codepunkte zu unterstützen, muss Folgendes getan werden:
Ich habe auch schnell getestet, welche Konvertierungsmethoden funktionieren und welche nicht
quelle
new String(Character.toChars(121849));
bricht in der Eclipse-Konsole, aber die dreizeilige Version funktioniert.str4
Zuordnung sollte nichtcode
sein ,codePoint
statt?Denken Sie daran, dass dies
char
ein integraler Typ ist und daher ein ganzzahliger Wert sowie eine Zeichenkonstante angegeben werden kann.quelle
int
Sie gesucht haben. Sie haben nach 0x2202 gesucht. Mein Fehler. In jedem Fall können Sie, wenn Sieint
den gewünschten Codepunkt haben, ihn einfach in a umwandelnchar
und verwenden (um einen zu erstellen,String
wenn Sie dies wünschen).Dieser hat gut für mich funktioniert.
Jetzt hat text2 ∂.
quelle
quelle
Das ist wie man es macht:
Diese Lösung stammt von Arne Vajhøj.
quelle
int c = 2202
, was falsch ist! Eine bessere Lösung als diese ist einfach zu sagen,int c = 0x2202
die Siechar ccc...
Mittellinie. Verwenden Sie einfachint cc = 0x2202;
und dannfinal String text=String.valueOf(cc);
Obwohl dies eine alte Frage ist, gibt es in Java 11, das heute veröffentlicht wurde, eine sehr einfache Möglichkeit, dies zu tun: Sie können eine neue Überladung von Character.toString () verwenden :
Da diese Methode jeden Unicode-Codepunkt unterstützt, beträgt die Länge des zurückgegebenen Strings nicht unbedingt 1.
Der Code, der für das in der Frage angegebene Beispiel benötigt wird, lautet einfach:
Dieser Ansatz bietet mehrere Vorteile:
char
.char[]
, was häufig gewünscht wird. Die von McDowell gepostete Antwort ist angemessen, wenn Sie den Codepunkt als zurückgeben möchtenchar[]
.quelle
int codePoint = 0x2202;
Dann:String s = Character.toString(codePoint); // <<< Requires JDK 11 !!!
Oder in einemSystem.out.println(Character.toString(0x2202)); // Prints ∂
Der folgende Code schreibt die 4 Unicode-Zeichen (durch Dezimalstellen dargestellt) für das Wort "be" auf Japanisch. Ja, das japanische Verb "be" hat 4 Zeichen! Der Wert der Zeichen ist dezimal und wurde in ein Array von String [] eingelesen - beispielsweise mit split. Wenn Sie Octal oder Hex haben, parseInt nehmen auch eine Radix.
quelle
Hier ist ein Block Unicode - Zeichen drucken zwischen
\u00c0
zu\u00ff
:quelle
Leider führt das Entfernen eines Spiels, wie im ersten Kommentar erwähnt (newbiedoodle), nicht zu einem guten Ergebnis. Die meisten (wenn nicht alle) IDE-Probleme verursachen Syntaxfehler. Der Grund dafür ist, dass das Java Escaped Unicode-Format die Syntax "\ uXXXX" erwartet, wobei XXXX 4 hexadezimale Ziffern sind, die obligatorisch sind. Versuche, diese Saite aus Stücken zu falten, schlagen fehl. Natürlich ist "\ u" nicht dasselbe wie "\\ u". Die erste Syntax bedeutet "u" maskiert, die zweite bedeutet "Escape" (gefolgt von "u"). Es ist seltsam, dass auf den Apache-Seiten ein Dienstprogramm vorgestellt wird, das genau dieses Verhalten ausführt. In Wirklichkeit ist es jedoch ein Escape-Mimic-Dienstprogramm . Apache hat einige eigene Dienstprogramme (ich habe sie nicht getestet), die diese Arbeit für Sie erledigen. Vielleicht ist es immer noch nicht das, was du haben willst.Dieses Dienstprogramm hat jedoch 1 hateinen guten Lösungsansatz. Mit der oben beschriebenen Kombination (MeraNaamJoker). Meine Lösung besteht darin, diesen Escaped-Mimic-String zu erstellen und ihn dann wieder in Unicode zu konvertieren (um echte Escaped-Unicode-Einschränkungen zu vermeiden). Ich habe es zum Kopieren von Text verwendet, daher ist es möglich, dass in der Uencode-Methode die Verwendung von '\\ u' mit Ausnahme von '\\\\ u' besser ist. Versuch es.
quelle
char c = (char) 0x2202; String s = "" + c;
quelle
(ANTWORT IST IN DOT NET 4.5 und in Java muss es einen ähnlichen Ansatz geben)
Ich komme aus Westbengalen in Indien. Soweit ich weiß, ist Ihr Problem ... Sie möchten ähnlich wie 'অ' (es ist ein Buchstabe in bengalischer Sprache) mit Unicode HEX produzieren:
0X0985
.Wenn Sie diesen Wert in Bezug auf Ihre Sprache kennen, wie werden Sie dann dieses sprachspezifische Unicode-Symbol richtig erzeugen?
In Dot Net ist das so einfach:
Jetzt ist x deine Antwort. Aber dies ist HEX by HEX-Konvertierung und Satz-zu-Satz-Konvertierung ist eine Arbeit für Forscher: P.
quelle