Gibt es in Java eine Möglichkeit, ein Unicode-Äquivalent für ein beliebiges Zeichen zu erhalten? z.B
Angenommen, eine Methode getUnicode(char c)
. Ein Anruf getUnicode('÷')
sollte zurückkehren \u00f7
.
Antworten:
Sie können dies für jedes Java-Zeichen mit dem einen Liner hier tun:
System.out.println( "\\u" + Integer.toHexString('÷' | 0x10000).substring(1) );
Aber es wird nur für die Unicode-Zeichen bis zu Unicode 3.0 funktionieren, weshalb ich davon ausgegangen bin, dass Sie dies für jedes Java-Zeichen tun können.
Da Java schon lange vor Unicode 3.1 entwickelt wurde und daher das Zeichenprimitiv von Java nicht ausreicht, um Unicode 3.1 und höher darzustellen, gibt es keine Zuordnung mehr "ein Unicode-Zeichen zu einem Java-Zeichen" (stattdessen wird ein monströser Hack verwendet).
Sie müssen hier also wirklich Ihre Anforderungen überprüfen: Müssen Sie Java-Zeichen oder ein mögliches Unicode-Zeichen unterstützen?
String.charAt
jetzt "ein halbes Zeichen" zurückzugeben und String.length
etwas zurückzugeben, das sich von der Anzahl der Zeichen unterscheiden kann, nicht wahr ? (Zeichen bedeutet hier Unicode-Codepunkt, nicht Java-Zeichen) Die String-Klasse sollte (und war vor Unicode 3.1) unabhängig von Codierungsproblemen sein.
Wenn Sie Java 5 haben, verwenden Sie char c = ...; String s = String.format ("\\u%04x", (int)c);
Wenn Ihre Quelle kein Unicode-Zeichen ( char
), sondern ein String ist, müssen charAt(index)
Sie das Unicode-Zeichen an Position bringen index
.
Nicht verwenden, codePointAt(index)
da dies 24-Bit-Werte (vollständiger Unicode) zurückgibt, die nicht mit nur 4 Hex-Ziffern dargestellt werden können (es werden 6 benötigt). Eine Erklärung finden Sie in den Dokumenten .
[EDIT] Um es klar zu machen: Diese Antwort verwendet nicht Unicode, sondern die Methode, mit der Java Unicode-Zeichen (dh Ersatzpaare) darstellt, da char 16 Bit und Unicode 24 Bit ist. Die Frage sollte lauten: "Wie kann ich char
in eine 4-stellige Hex-Zahl konvertieren ?", Da es nicht (wirklich) um Unicode geht.
private static String toUnicode(char ch) {
return String.format("\\u%04x", (int) ch);
}
( "\\u" + Integer.toHexString('÷' | 0x10000).substring(1) )
char c = 'a';
String a = Integer.toHexString(c); // gives you---> a = "61"
Ich habe diesen schönen Code im Web gefunden.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Unicode {
public static void main(String[] args) {
System.out.println("Use CTRL+C to quite to program.");
// Create the reader for reading in the text typed in the console.
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
try {
String line = null;
while ((line = bufferedReader.readLine()).length() > 0) {
for (int index = 0; index < line.length(); index++) {
// Convert the integer to a hexadecimal code.
String hexCode = Integer.toHexString(line.codePointAt(index)).toUpperCase();
// but the it must be a four number value.
String hexCodeWithAllLeadingZeros = "0000" + hexCode;
String hexCodeWithLeadingZeros = hexCodeWithAllLeadingZeros.substring(hexCodeWithAllLeadingZeros.length()-4);
System.out.println("\\u" + hexCodeWithLeadingZeros);
}
}
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}
Sind Sie mit der Verwendung von Unicode wählerisch, weil es mit Java einfacher ist, wenn Sie Ihr Programm so schreiben, dass es den Wert "dec" oder (HTML-Code) verwendet, können Sie einfach Datentypen zwischen char und int umwandeln
char a = 98;
char b = 'b';
char c = (char) (b+0002);
System.out.println(a);
System.out.println((int)b);
System.out.println((int)c);
System.out.println(c);
Gibt diese Ausgabe
b
98
100
d
Zuerst bekomme ich die hohe Seite des Saiblings. Holen Sie sich danach die niedrige Seite. Konvertieren Sie alle Dinge in HexString und geben Sie das Präfix ein.
int hs = (int) c >> 8;
int ls = hs & 0x000F;
String highSide = Integer.toHexString(hs);
String lowSide = Integer.toHexString(ls);
lowSide = Integer.toHexString(hs & 0x00F0);
String hexa = Integer.toHexString( (int) c );
System.out.println(c+" = "+"\\u"+highSide+lowSide+hexa);