En los siguientes ejemplos convertiremos caracteres entre UTF8 y Unicode. UTF8 es una forma binaria compacta para codificar caracteres Unicode de 16-bits en 8 bits. El código fuente de este ejemplo está en el fichero llamado StringConverter.java.
Primero creamos un String que contiene los caracteres Unicode:
String original = new String("A" + "\u00ea" + "\u00f1"
+ "\u00fc" + "C");
Cuando imprimimos el String llamado original aparecerá como:
AêñüC
Para convertir el objeto String a UTF8, llamamos al método getBytes y le especificamos el identificador de codificación apropiado como un parámetro. El método getBytes devuelve un array de bytes en formato UTF8. Para crear un objeto String desde un array de bytes no-Unicode, llamamos al constructor de String con el parámetro de la codificación, El código que hace estás llamadas está encerrado en un bloque try, para el caso de que la codificación especificada no estuviera soportada:
try {
byte[] utf8Bytes = original.getBytes("UTF8");
byte[] defaultBytes = original.getBytes();
String roundTrip = new String(utf8Bytes, "UTF8");
System.out.println("roundTrip = " + roundTrip);
System.out.println();
printBytes(utf8Bytes, "utf8Bytes");
System.out.println();
printBytes(defaultBytes, "defaultBytes");
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Imprimimos los valores de los arrays utf8Bytes y defaultBytes para demostrar un punto importante. La longitud del texto convertido podría no ser la misma que la longitud del texto original. Algunos caracteres Unicode se traducen en bytes sencillos, y otros en parejas de bytes. Nuestra rutina para mostrar los arrays de bytes es esta:
public static void printBytes(byte[] array, String name) {
for (int k = 0; k < array.length; k++) {
System.out.println(name + "[" + k + "] = " + "0x" +
UnicodeFormatter.byteToHex(array[k]));
}
}
Aquí está la salida de los métodos printBytes. Observa que sólo el primer y último caracteres la "A" y la "C", son los mismos en los dos arrays:
utf8Bytes[0] = 0x41
utf8Bytes[1] = 0xc3
utf8Bytes[2] = 0xaa
utf8Bytes[3] = 0xc3
utf8Bytes[4] = 0xb1
utf8Bytes[5] = 0xc3
utf8Bytes[6] = 0xbc
utf8Bytes[7] = 0x43
defaultBytes[0] = 0x41
defaultBytes[1] = 0xea
defaultBytes[2] = 0xf1
defaultBytes[3] = 0xfc
defaultBytes[4] = 0x43