Cómo convertir una cadena con codificación Unicode en una cadena de letras

Resuelto SharonBL asked hace 12 años • 23 respuestas

Tengo una cadena con caracteres Unicode\uXXXX escapados y quiero convertirla a letras Unicode normales. Por ejemplo:

"\u0048\u0065\u006C\u006C\u006F World"

debe convertirse

"Hello World"

Sé que cuando imprimo la primera cadena ya se muestra Hello world. Mi problema es que leo los nombres de los archivos de un archivo y luego los busco. Los nombres de los archivos en el archivo se escapan con codificación Unicode, y cuando busco los archivos, no puedo encontrarlos, ya que busca un archivo con \uXXXXsu nombre.

SharonBL avatar Jun 22 '12 02:06 SharonBL
Aceptado

Apache Commons Lang StringEscapeUtils.unescapeJava() puede decodificarlo correctamente.

import org.apache.commons.lang.StringEscapeUtils;

@Test
public void testUnescapeJava() {
    String sJava="\\u0048\\u0065\\u006C\\u006C\\u006F";
    System.out.println("StringEscapeUtils.unescapeJava(sJava):\n" + StringEscapeUtils.unescapeJava(sJava));
}


 output:
 StringEscapeUtils.unescapeJava(sJava):
 Hello
Tony avatar Jan 16 '2013 21:01 Tony

Técnicamente haciendo:

String myString = "\u0048\u0065\u006C\u006C\u006F World";

lo convierte automáticamente a "Hello World", así que supongo que estás leyendo la cadena de algún archivo. Para convertirlo a "Hola", tendrá que analizar el texto en dígitos Unicode separados (tome \uXXXXy simplemente obtenga XXXX), luego haga Integer.ParseInt(XXXX, 16)esto para obtener un valor hexadecimal y luego escriba mayúsculas y minúsculas para charobtener el carácter real.

Editar: Algún código para lograr esto:

String str = myString.split(" ")[0];
str = str.replace("\\","");
String[] arr = str.split("u");
String text = "";
for(int i = 1; i < arr.length; i++){
    int hexVal = Integer.parseInt(arr[i], 16);
    text += (char)hexVal;
}
// Text will now have Hello
NominSim avatar Jun 21 '2012 20:06 NominSim