No existe una "cadena UTF-8" en Java. Todo está en Unicode.
Cuando llama al String.getBytes()
sin especificar una codificación, que usa la codificación predeterminada de la plataforma, eso casi siempre es una mala idea.
No debería tener que hacer nada para obtener los caracteres correctos aquí; la solicitud debería manejarlo todo para usted. Si no lo está haciendo, es probable que ya haya perdido datos.
¿Podría dar un ejemplo de lo que realmente está yendo mal? Especifique los valores Unicode de los caracteres en la cadena que está recibiendo (por ejemplo, usando toCharArray()
y luego convirtiendo cada char
en un int
) y lo que esperaba recibir.
EDIT: Para diagnosticar esta, usar algo como esto:
public static void dumpString(String text) {
for (int i = 0; i < text.length(); i++) {
System.out.println(i + ": " + (int) text.charAt(i));
}
}
Tenga en cuenta que que dará el valor decimal de cada carácter Unicode. Si tiene un práctico método de biblioteca hexadecimal, puede usarlo para darle el valor hexadecimal. El punto principal es que va a volcar los caracteres Unicode en la cadena.
告 Este personaje, por ejemplo, necesita ser convertido consigo 229 145 138 esta representación decimal whichis correcta de acuerdo con http://www.ansell-uebersetzungen.com/gbuni.html porque es esta representación hexadecimal: E5 91 8A Así que ahora necesito que se convierta en unicode. I –
Entonces, en mi opinión, la solicitud envía los caracteres correctos pero no puedo leerlos en Java, es necesario convertirlos a Unicode –
@Rob: No, eso debería aparecer en la cadena como U + 544A. La representación hexadecimal que ha citado es la representación UTF-8, que * nunca * será lo que está en la cadena misma. Usted dice que "obtiene" 229 145 138 - ¿Cuándo hace qué? Editaré mi respuesta con un código de diagnóstico. –