2013-05-18 24 views
8

Poniższy kod daje mi ciąg Unicode jako காJava Unicode na ciąg szesnastkowy

sysout = new PrintStream(System.out, true, "UTF-8"); 
sysout.println("\u0B95\u0bbe"); 

Dając கா jako wejście, mogę dostać wartości hex jako \ u0B95 i \ u0bbe?

PS: To jest język tamilski.

+0

To nie jest duplikatem chyba. Rozwiązanie dotyczy pojedynczego znaku. Ale கா jest kombinacją dwóch znaków. Dlatego masz dwie wartości szesnastkowe. – user1611248

Odpowiedz

5

Według this musisz spróbować

System.out.println("\\u" + Integer.toHexString('க' | 0x10000).substring(1)); 

ale to będzie działać tylko na Unicode do 3,0. Jeśli chcesz uzyskać więcej wartości, po prostu utwórz pętlę, np.

String foo = "கா"; 
for (int i = 0; i < foo.length(); i++) 
    System.out.println("\\u" + Integer.toHexString(foo.charAt(i) | 0x10000).substring(1)); 

która produkuje

\u0b95 
\u0bbe 

Jeśli chcesz mieć je w jednej linii, aby zmienić System.out.println()System.out.print() i dodać System.out.print("\n") w końcu.

+0

Właściwie potrzebuję łańcucha szesnastkowego "கா", a nie "க". obaj są inni. – user1611248

+1

@ user1611248 Zobacz zaktualizowany post. – Mateusz

+0

@ Mateusz Chcę tego samego w odwrotny sposób, jak to osiągnąć? –

4

Możesz użyć funkcji format, aby wydrukować sekwencje tekstowe UTF-16 w języku Java.

Na przykład ten kod zapisuje ucieka do STDOUT:

String str = "கா"; 
for(char ch : str.toCharArray()) 
    System.out.format("\\u%04x", (int) ch);