代码之家  ›  专栏  ›  技术社区  ›  javamonkey79

通过unicode\u escape进行解码的java方法

  •  1
  • javamonkey79  · 技术社区  · 6 年前

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

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

    将打印:

    123 Fake St.
    

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

    编辑1

    我相信我的问题与 this one 因为这个问题看起来像是要求解码一个只有十六进制的字符串。我的是混合的。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Community Dunja Lalic    4 年前

    如果尝试使用该字符串,您将收到一个错误,因为 \x 不是 valid scape character 。您可以使用要替换的unicode表单 \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.
    
    推荐文章