2013-09-04 12 views
9

Na przykład w zestawie znaków Emoji, U+1F601 jest wartością Unicode dla "GRINNING FACE WITH SMILING EYES", a \xF0\x9F\x98\x81 jest wartością bajtów UTF-8 dla tego znaku.Jak przekonwertować kodowanie UTF-8 do Unicode w Javie?

\xE2\x9D\xA4 jest dla ciężkiego czarnego serca, a kod Unicode to U+2764.

Moje pytanie brzmi: jeśli mam tablicę bajtów o wartości (0xF0, 0x9F, 0x98, 0x81, 0xE2, 0x9D, 0xA4), to w jaki sposób mogę ją przekonwertować na wartość Unicode?

Dla powyższego wyniku potrzebuję tablicy z wartościami "1F601" i "2764".

Wiem, że mogę napisać skomplikowaną metodę wykonania tej pracy, ale mam nadzieję, że istnieje już biblioteka do wykonania tej pracy.

+1

Można odnieść to [Pytanie] (http: // stackoverflow.com/questions/4049740/how-to-convert-utf8-to-unicode).to pytanie już zostało udzielone. –

+1

Czy potrzebujesz tylko ciąg Unicode lub czy rzeczywiście potrzebujesz wartości 1F601? Ponieważ do tego ostatniego będziesz potrzebować ['String.codePointAt()'] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#codePointAt (int)) * dodatkowo * wytwarzanie "ciągu", jak wyjaśniono w odpowiedziach. –

+0

@JoachimSauer Tak, tego właśnie chcę. Dzięki za wskazanie metody codePointAt. Tutaj zaktualizowałem moje pytanie, aby było jasne. Czy możesz znowu spojrzeć? Dzięki. – XWang

Odpowiedz

8

Moje pytanie brzmi: jeśli mam tablicę bajtów z wartością (0xF0, 0x9F, 0x98, 0x81), to w jaki sposób mogę ją przekonwertować na wartość Unicode?

Wystarczy wywołać konstruktor String podając danych i kodowanie:

String text = new String(bytes, "UTF-8"); 

można określić Charset zamiast nazwy kodowania - Lubię Guava „s proste Charsets klasy, który pozwala napisać:

String text = new String(bytes, Charsets.UTF_8); 

Albo Java 7, użyj StandardCharsets nawet bez konieczności Guava:

String text = new String(bytes, StandardCharsets.UTF_8); 
+0

Jeśli używasz "java.nio.charset.StandardCharsets" Java 7, nie potrzebujesz nawet Guava – artbristol

+0

@artbristol: Dzięki - rzuciłem okiem, ale spudłowałem. Zmodyfikuje ją. –

+1

@JonSkeet proszę, jaka jest odpowiednik w .net lub C# –

1

Wystarczy użyć String Klasa:

byte[] bytesArray = new byte[10]; // array of bytes (0xF0, 0x9F, 0x98, 0x81) 

String string = new String(bytesArray, Charset.forName("UTF-8")); // covert byteArray 

System.out.println(string); // Test result 
0

Oto przykład przy użyciu InputStreamReader:

InputStream inputStream = new FileInputStream("utf-8-text.txt"); 
Reader  reader  = new InputStreamReader(inputStream, 
               Charset.forName("UTF-8")); 

int data = reader.read(); 
while(data != -1){ 
    char theChar = (char) data; 
    data = reader.read(); 
} 

reader.close(); 

Ref: Java I18N example

Powiązane problemy