Saltar al contenido

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

Nuestro team especializado pasados varios días de trabajo y de recopilar de información, dimos con la respuesta, esperamos que te resulte útil en tu proyecto.

Solución:

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. Entonces, 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 un mayor control utilizando el nivel inferior Charset API. Por ejemplo, puede generar una excepción cuando se encuentra un carácter no codificable o usar un carácter diferente para el texto de reemplazo.

Lo que funcionó para mí:(“üzüm bağları” es la escritura correcta en turco)

Convierta 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ı"

Convertir 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ı"

Si tienes un Stringusted puede hacer eso:

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

Si tienes un ‘roto’ Stringhiciste algo mal, convirtiendo un String a un String ¡En otra codificación definitivamente no es el camino a seguir! Puedes convertir un String a un byte[] y viceversa (dada una codificación). en Java Strings están codificados AFAIK con UTF-16 pero eso es un detalle de implementación.

Di que tienes un InputStreampuedes leer en un byte[] y luego convertir eso en un String usando

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

o incluso mejor (gracias a erickson) use InputStreamReader como eso:

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

Sección de Reseñas y Valoraciones

Si sostienes alguna suspicacia o forma de refinar nuestro tutorial eres capaz de realizar una acotación y con mucho placer lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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