这是一个基本问题,但我在SA上找不到完全相同的内容:
我有这个字符串:
String s = "surname\":\"B\\u00f6rner\"},{\"forename\""
我想得到的是:
String s = "surname\":\"Börner\"},{\"forename\""
用Java做任何事吗? THX!
答案 0 :(得分:1)
手动删除反斜杠将使Java解释unicode。如果您无法修改从API调用中收到的字符串,则可以使用:
s = s.replaceAll("\\\\u00f6", "\u00f6");
答案 1 :(得分:1)
String s = "surname\":\"B\u00f6rner\"},{\"forename\"" ;
try {
String t = URLDecoder.decode(s, "UTF-8") ;
System.out.println(t) ;
}
catch( Throwable t ) {
t.printStackTrace(System.err) ;
}
输出:surname":"Börner"},{"forename"
你必须找到一种方法来删除额外的\,正如其他人所说。
答案 2 :(得分:1)
只要您不需要Unicode基准平面之外的字符,这应该不是很困难:
final Matcher m = Pattern.compile("\\\\u(.{4})").matcher(
"surname\":\"B\\u00f6rner\"},{\"forename\"");
final StringBuffer b = new StringBuffer();
while (m.find())
m.appendReplacement(b, String.valueOf(((char)Integer.parseInt(m.group(1), 16))));
m.appendTail(b);
System.out.println(b);
答案 3 :(得分:0)
如果那是Java源代码,那么两个字符串文字意味着完全相同的东西......前提是(在后一种情况下)你告诉Java编译器源文件编码的字符集。或者,{ {3}}命令(使用-reverse
命令)可用于将文件中的\uxxxx
unicode转义转换为本机字符。
如果这些字符串值实际上是String值,而不是String文字,那么您将需要进行某种运行时转换。 (我确信有第三方库方法可以做到这一点......)