java 通过 unicode_escape 解码的方法

java method for decoding via unicode_escape

Python 有一个很好的函数来解码字符串中的十六进制和 unicode 字符,如下所示:

print "123\x20Fake\x20St\u002e".decode('unicode_escape')

将打印:

123 Fake St.

在 java 中是否有类似的东西,或者这是必须用正则表达式处理的东西?

编辑 1

我相信我的问题与 this one 不同,因为看起来那个问题要求解码仅十六进制的字符串。我的是混合的。

如果您尝试使用该字符串,您会收到错误消息,因为 \x 不是 valid scape character。您可以使用将 \x 替换为 \u00 的 unicode 形式,也可以使用八进制形式,没有任何前导字符。

Unicode:

System.out.println("123\u0020Fake\u0020St\u002e"); // 123 Fake St.

八进制(20十六进制转八进制为40):

System.out.println("123FakeSt\u002e"); // 123 Fake St.

另一方面,如果您对字符串进行转义。

String scaped = "123\x20Fake\x20St\u002e";

java 中的文字 123\x20Fake\x20St\u002e

你可以看到 this answer 来转换 scaped unicodes 字符,但是你必须先处理十六进制,你可以像之前提到的那样用 \u00 替换 \x :

scaped.replaceAll("\\x", "\\u00")

然后使用上面答案中提到的任何方法来转换 unicode 转义字符串。使用 apache commons-text 类似于:

StringEscapeUtils.unescapeJava("123\x20Fake\x20St\u002e"
        .replaceAll("\\x", "\\u00")) // 123 Fake St.