通过unicode_escape进行解码的java方法

时间:2018-03-27 01:02:31

标签: java python parsing string-decoding

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

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

将打印:

123 Fake St.

java中是否有类似内容,或者这是否必须使用正则表达式进行处理?

编辑1

我认为我的问题与this one不同,因为看起来这个问题要求解码只有十六进制的字符串。我的情况好坏参半。

1 个答案:

答案 0 :(得分:1)

如果您尝试使用该字符串,则会收到错误,因为\x不是valid scape character。您可以使用将\x替换为\u00的unicode表单或八进制表单,而不使用任何先前的字符。

的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:< / p>

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

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

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