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

新手上路,请多包涵

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

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

应该成为

"Hello World"

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

原文由 SharonBL 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 806
2 个回答

技术上做:

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

自动将其转换为 "Hello World" ,所以我假设您正在从某个文件中读取字符串。为了将其转换为“Hello”,您必须将文本解析为单独的 unicode 数字,(取 \uXXXX 并得到 XXXX )然后执行 Integer.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

原文由 NominSim 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Tony 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题