3

这是一个基本问题,但我在 SA 上找不到完全相同的副本:

我有这个字符串:

String s = "surname\":\"B\\u00f6rner\"},{\"forename\""

我想得到的是:

String s = "surname\":\"Börner\"},{\"forename\""

有什么方法可以在 Java 中做到这一点?谢谢!

4

4 回答 4

1

手动删除反斜杠将使 Java 像这样解释 unicode。如果您无法修改从 API 调用收到的字符串,您可以使用:

s = s.replaceAll("\\\\u00f6", "\u00f6");
于 2012-08-11T11:33:09.297 回答
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"

正如其他人所说,您必须找到一种方法来删除额外的 \。

于 2012-08-11T11:35:16.440 回答
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);
于 2012-08-11T13:17:02.100 回答
0

如果那是 Java 源代码,那么这两个字符串文字的含义完全相同……前提是(在后一种情况下)您告诉 Java 编译器源文件编码的字符集。或者,nativetoascii命令(带有-reverse命令)可用于将\uxxxx文件中的 unicode 转义符转换为本机字符。

如果这些字符串值实际上是字符串值,而不是字符串文字,那么您将需要进行某种运行时转换。(我确信有一个 3rd 方库方法可以做到这一点......)

于 2012-08-11T11:35:28.223 回答