Come convertire stringhe da e verso array di byte UTF8 in Java

In Java, ho una stringa e voglio codificarla come array di byte (in UTF8, o qualche altra codifica). In alternativa, ho un array di byte (in qualche codifica conosciuta) e voglio convertirlo in una stringa Java. Come faccio queste conversioni?

Soluzione

Convertire da Stringa a byte[]:

String s = "some text here";
byte[] b = s.getBytes(StandardCharsets.UTF_8);

Convertire da byte[] a Stringa:

byte[] b = {(byte) 99, (byte)97, (byte)116};
String s = new String(b, StandardCharsets.US_ASCII);

Naturalmente dovreste usare il nome corretto della codifica. I miei esempi hanno usato US-ASCII e UTF-8, le due codifiche più comuni.

Commentari (10)
String original = "hello world";
byte[] utf8Bytes = original.getBytes("UTF-8");
Commentari (2)

Puoi convertire direttamente tramite il costruttore String(byte[], String) e il metodo getBytes(String). Java espone i set di caratteri disponibili tramite la classe Charset. La documentazione del JDK elenca le codifiche supportate.

Il 90% delle volte, tali conversioni sono eseguite su flussi, quindi useresti le classi Reader/Writer. Non decodifichereste in modo incrementale usando i metodi String su flussi di byte arbitrari - vi lascereste aperti a bug che coinvolgono caratteri multibyte.

Commentari (3)