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 String
usted puede hacer eso:
String s = "test";
try
s.getBytes("UTF-8");
catch(UnsupportedEncodingException uee)
uee.printStackTrace();
Si tienes un ‘roto’ String
hiciste 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 String
s están codificados AFAIK con UTF-16
pero eso es un detalle de implementación.
Di que tienes un InputStream
puedes 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.