utf8 convertir codificacion cambiar java java-me utf-8 character-encoding iso-8859-1

convertir - ¿Cómo convierto entre ISO-8859-1 y UTF-8 en Java?



convertir string a utf 8 java (5)

¿Alguien sabe cómo convertir una cadena de ISO-8859-1 a UTF-8 y viceversa en Java?

Obtengo una cadena de la web y la guardo en el RMS (J2ME), pero quiero conservar los caracteres especiales y obtener la cadena del RMS pero con la codificación ISO-8859-1. ¿Cómo hago esto?


Aquí hay una manera fácil con String output (creé un método para hacer esto):

public static String (String input){ String output = ""; try { /* From ISO-8859-1 to UTF-8 */ output = new String(input.getBytes("ISO-8859-1"), "UTF-8"); /* From UTF-8 to ISO-8859-1 */ output = new String(input.getBytes("UTF-8"), "ISO-8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return output; } // Example input = "Música"; output = "Música";


En general, no puedes hacer esto. UTF-8 es capaz de codificar cualquier punto de código Unicode. ISO-8859-1 solo puede manejar una pequeña fracción de ellos. Por lo tanto, la transcodificación de ISO-8859-1 a UTF-8 no es un problema. Retroceder de UTF-8 a ISO-8859-1 hará que aparezcan "caracteres de reemplazo" ( ) en el texto cuando se encuentren caracteres no admitidos.

Para transcodificar texto:

byte[] latin1 = ... byte[] utf8 = new String(latin1, "ISO-8859-1").getBytes("UTF-8");

o

byte[] utf8 = ... byte[] latin1 = new String(utf8, "UTF-8").getBytes("ISO-8859-1");

Puede ejercer más control utilizando las API de Charset nivel Charset . Por ejemplo, puede generar una excepción cuando se encuentre un carácter no codificable o utilizar un carácter diferente para reemplazar el texto.


Si tienes un String , puedes hacer eso:

String s = "test"; try { s.getBytes("UTF-8"); } catch(UnsupportedEncodingException uee) { uee.printStackTrace(); }

Si tienes un String ''roto'', hiciste algo mal, ¡convertir un String en un String en otra codificación definitivamente no es el camino a seguir! Puede convertir una String en un byte[] y viceversa (dada una codificación). En Java String s están codificadas con AFAIK con UTF-16 pero eso es un detalle de implementación.

Supongamos que tiene un InputStream , puede leer en un byte[] y luego convertirlo en una String usando

byte[] bs = ...; String s; try { s = new String(bs, encoding); } catch(UnsupportedEncodingException uee) { uee.printStackTrace(); }

o incluso mejor (gracias a Erickson) usa InputStreamReader así:

InputStreamReader isr; try { isr = new InputStreamReader(inputStream, encoding); } catch(UnsupportedEncodingException uee) { uee.printStackTrace(); }


La clase de Conjuntos IO de Apache Commons puede ser útil:

String utf8String = new String(org.apache.commons.io.Charsets.ISO_8859_1.encode(latinString).array())


Lo cual funcionó para mí: ("üzüm bağları" es el correcto escrito en turco)

Convierte ISO-8859-1 a UTF-8:

String encodedWithISO88591 = "üzüm baÄları"; String decodedToUTF8 = new String(encodedWithISO88591.getBytes("ISO-8859-1"), "UTF-8"); //Result, decodedToUTF8 --> "üzüm bağları"

Convierte UTF-8 a ISO-8859-1

String encodedWithUTF8 = "üzüm bağları"; String decodedToISO88591 = new String(encodedWithUTF8.getBytes("UTF-8"), "ISO-8859-1"); //Result, decodedToISO88591 --> "üzüm baÄları"