Codificaciones de bytes y cadenas

Si una matriz de bytes contiene texto no Unicode, puede convertir el texto a Unicode con uno de los métodos del constructor String. A la inversa, puedes convertir un objeto String en una matriz de bytes de caracteres no Unicode con el método String.getBytes. Al invocar cualquiera de estos métodos, se especifica el identificador de codificación como uno de los parámetros.

El ejemplo que sigue convierte caracteres entre UTF-8 y Unicode. UTF-8 es un formato de transmisión para Unicode que es seguro para los sistemas de archivos UNIX. El código fuente completo del ejemplo está en el archivo StringConverter.java.

El programa StringConverter comienza creando un String que contiene caracteres Unicode:

String original = new String("A" + "\u00ea" + "\u00f1" + "\u00fc" + "C");

Cuando se imprime, el String llamado original aparece como:

AêñüC

Para convertir el objeto String a UTF-8, invoca el método getBytes y especifica el identificador de codificación apropiado como parámetro. El método getBytes devuelve una matriz de bytes en formato UTF-8. Para crear un objeto String a partir de un array de bytes no Unicode, invoca el constructor String con el parámetro encoding. El código que realiza estas llamadas se encierra en un bloque try, por si la codificación especificada no está soportada:

El programa StringConverter imprime los valores de las matrices utf8Bytes y defaultBytes para demostrar un punto importante: La longitud del texto convertido puede no ser la misma que la del texto de origen. Algunos caracteres Unicode se traducen en bytes individuales, otros en pares o tripletes de bytes.

El método printBytes muestra las matrices de bytes invocando el método byteToHex, que está definido en el archivo fuente, UnicodeFormatter.java. Aquí está el método printBytes:

A continuación se muestra la salida del método printBytes. Observe que sólo el primer y el último byte, los caracteres A y C, son iguales en ambas matrices:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *