El siguiente código nos permite identificar si la entrada es UTF-8 ó ISO-8859-1. Así mismo hay implementado un código extra que nos haría poder pasar de UTF-8 a ISO-8859-1, en el caso de que la entrada no venga en esta última codificación. Simplemente, se decodifica en bytes la entrada y se vuelve a codificar con la nueva codificación.
En otro caso, podríamos elegir también otra codificación distinta si la necesitamos. Aquí podemos encontrar más información sobre el Charset y algunos ejemplos de codificaciones.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; [...] // Vemos si el formato entrante es ASCII o UTF8 CharsetEncoder isoEncoder = Charset.forName("ISO-8859-1").newEncoder(); CharsetEncoder utf8Encoder = Charset.forName("UTF-8").newEncoder(); Boolean isISO = isoEncoder.canEncode(cadenaTexto); Boolean isUTF8 = utf8Encoder.canEncode(textArea.getText()); [...] // Convertir de UTF-8 a ISO-8859-1 if (isISO == false){ Charset utf8charset = Charset.forName("UTF-8"); Charset iso88591charset = Charset.forName("ISO-8859-1"); // Decode UTF-8 ByteBuffer bb = ByteBuffer.wrap(cadenaTexto.getBytes()); CharBuffer data = utf8charset.decode(bb); // Encode ISO-8559-1 ByteBuffer outputBuffer = iso88591charset.encode(data); byte[] outputData = outputBuffer.array(); String datos = new String(outputData); } |