如何将具有 Unicode 编码的字符串转换为字母字符串

2022-08-31 10:48:51

我有一个带有转义 Unicode 字符的字符串,我想将其转换为常规 Unicode 字母。例如:\uXXXX

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

应该成为

"Hello World"

我知道当我打印第一个字符串时,它已经显示.我的问题是我从文件中读取文件名,然后搜索它们。文件中的文件名使用Unicode编码进行转义,当我搜索文件时,我找不到它们,因为它搜索名称中的文件。Hello world\uXXXX


答案 1

Apache Commons Lang StringEscapeUtils.unescapeJava() 可以正确地解码它。

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

答案 2

技术上做:

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

自动将其转换为 ,因此我假设您正在从某个文件中读取字符串。为了将其转换为“Hello”,您必须将文本解析为单独的unicode数字,(取并获取)然后执行以获取十六进制值,然后对其进行大小写以获取实际字符。"Hello World"\uXXXXXXXXInteger.ParseInt(XXXX, 16)char

编辑:一些代码来完成这个:

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

推荐