2013-09-04 8 views
9

Ad esempio, nel set di caratteri Emoji, U+1F601 è il valore unicode per "VISO DI GRINNING CON OCCHI SORRIDENTI" e \xF0\x9F\x98\x81 è il valore di byte UTF-8 per questo carattere.Come convertire UTF-8 in Unicode in Java?

\xE2\x9D\xA4 è per il cuore nero pesante e l'unicode è U+2764.

Quindi la mia domanda è, se ho un array di byte con valore (0xF0, 0x9F, 0x98, 0x81, 0xE2, 0x9D, 0xA4), quindi come posso convertirlo in valore Unicode?

Per il risultato sopra, quello che voglio è un array di stringhe con valore "1F601" e "2764".

So che posso scrivere un metodo complesso per fare questo lavoro, ma spero che ci sia già una libreria per fare questo lavoro.

+1

È possibile fare riferimento questo [domanda] (http: // stackoverflow.com/questions/4049740/how-to-convert-utf8-to-unicode).questa domanda ha già una risposta. –

+1

Hai solo bisogno di una stringa Unicode o hai effettivamente bisogno del valore 1F601? Perché per quest'ultimo è necessario ['String.codePointAt()'] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#codePointAt (int)) * inoltre * producendo il 'String' come spiegato nelle risposte. –

+0

@JoachimSauer Sì, questo è quello che voglio. Grazie per aver indicato il metodo codePointAt. Qui ho aggiornato la mia domanda per chiarire. Puoi dare un'altra occhiata? Grazie. – XWang

risposta

8

Quindi la mia domanda è, se ho un array di byte con valore (0xF0, 0x9F, 0x98, 0x81), allora come posso convertirlo in valore Unicode?

È sufficiente chiamare il costruttore String specificando i dati e la codifica:

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

È possibile specificare un Charset al posto del nome della codifica - mi piace Guava 's semplice classe Charsets, che consente a scrivere:

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

O per Java 7, utilizzare StandardCharsets senza nemmeno bisogno Guava:

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

Se usi java.nio.charset.StandardCharsets di Java 7, non hai nemmeno bisogno di Guava – artbristol

+0

@artbristol: Grazie - ho avuto una rapida occhiata, ma l'ho persa. Lo modificherà in. –

+1

@JonSkeet, per favore qual è l'equivalente in .net o C# –

1

Basta usare String classe:

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

Ecco un esempio utilizzando 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(); 

Rif: Java I18N example