Python 有一个很好的函数来解码字符串中的十六进制和 unicode 字符,如下所示:
print "123\x20Fake\x20St\u002e".decode('unicode_escape')
将打印:
123 Fake St.
java中是否有类似的东西,或者这是必须用正则表达式处理的东西?
编辑 1
我相信我的问题与 this one 不同因为看起来这个问题要求解码仅十六进制的字符串。我的是混合的。
最佳答案
如果您尝试使用该字符串,您将收到错误,因为 \x
不是 valid scape character 。您可以使用将 \x
替换为 \u00
的 unicode 形式,也可以使用不带任何前面字符的八进制形式。
统一码:
System.out.println("123\u0020Fake\u0020St\u002e"); // 123 Fake St.
八进制(20 十六进制转八进制为 40):
System.out.println("123\40Fake\40St\u002e"); // 123 Fake St.
<小时/>
另一方面,如果你对字符串进行了转义。
String scaped = "123\\x20Fake\\x20St\\u002e";
在java中是文字123\x20Fake\x20St\u002e
。
您可以看到 this answer 转换转义的 unicodes 字符,但您必须先处理十六进制,并且可以将 \x
替换为 \u00
,例如前面提到过:
scaped.replaceAll("\\\\x", "\\\\u00")
然后使用上面答案中提到的任何方法来转换 unicode 转义字符串。使用 apache commons-text
会是这样的:
StringEscapeUtils.unescapeJava("123\\x20Fake\\x20St\\u002e"
.replaceAll("\\\\x", "\\\\u00")) // 123 Fake St.
关于java通过unicode_escape解码的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49502889/