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?
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.
String original = "hello world";
byte[] utf8Bytes = original.getBytes("UTF-8");
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.