Cómo convertir una cadena con codificación Unicode en una cadena de letras
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 \uXXXX
su nombre.
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
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 \uXXXX
y simplemente obtenga XXXX
), luego haga Integer.ParseInt(XXXX, 16)
esto para obtener un valor hexadecimal y luego escriba mayúsculas y minúsculas para char
obtener 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