Cómo convertir cadenas a y desde matrices de bytes UTF8 en Java

En Java, tengo una cadena y quiero codificarla como una matriz de bytes (en UTF8, o alguna otra codificación). Alternativamente, tengo una matriz de bytes (en alguna codificación conocida) y quiero convertirla en una cadena de Java. ¿Cómo puedo hacer estas conversiones?

Solución

Convertir de String a byte[]:

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

Convertir de byte[] a String:

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

Por supuesto, debe utilizar el nombre de codificación correcto. Mis ejemplos utilizan US-ASCII y UTF-8, las dos codificaciones más comunes.

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

Se puede convertir directamente mediante el constructor String(byte[], String) y el método getBytes(String). Java expone los conjuntos de caracteres disponibles a través de la clase Charset. La documentación del JDK enumera las codificaciones soportadas.

El 90% de las veces, estas conversiones se realizan en flujos, por lo que se utilizan las clases Reader/Writer. No deberías decodificar incrementalmente usando los métodos String en flujos de bytes arbitrarios - te expondrías a errores relacionados con caracteres multibyte.

Comentarios (3)