将转义的Unicode字符转换回实际字符

Sud*_*dar 27 java unicode utf-8 utf8-decode

我在Java中的字符串变量中具有以下值,其中UTF-8字符编码如下所示

Dodd\u2013Frank
Run Code Online (Sandbox Code Playgroud)

代替

Dodd–Frank
Run Code Online (Sandbox Code Playgroud)

(假设我无法控制如何将此值分配给此字符串变量)

现在我如何正确转换(编码)它并将其存储回String变量?

我找到了以下代码

Charset.forName("UTF-8").encode(str);
Run Code Online (Sandbox Code Playgroud)

但这会返回一个ByteBuffer,但我想String回来.

编辑:

更多其他信息.

当我用System.out.println(str);我得到

Dodd\u2013Frank
Run Code Online (Sandbox Code Playgroud)

我不确定什么是正确的术语(UTF-8或unicode).请原谅我.

jlo*_*rdo 52

尝试

str = org.apache.commons.lang3.StringEscapeUtils.unescapeJava(str);
Run Code Online (Sandbox Code Playgroud)

来自Apache Commons Lang

  • 如果`Java` 本身提供解析值的功能,那么我们为什么要使用任何第三方工具? (2认同)
  • @BhavikAmbani那么请解释一下如何做,因为你的答案肯定不会。 (2认同)
  • 这可能在一个简单的情况下解决您的问题,但要小心.如果您尝试使用此解决方案,例如,在您希望未转义的带有UTF8字符的JSON编码字符串上,它将无法触及您不想触及的内容:例如,如果此String位于一块JSON"\ u003ca中href = \"http:\ /\/ twitter.com \"rel = \"nofollow \"\ u003eTwitter Web Client\u003c\/ a\u003e" (2认同)

dro*_*ert 14

您可以利用java.util.Properties支持带有'\ uXXXX'转义序列的字符串这样的事实,并执行以下操作:

Properties p = new Properties();
p.load(new StringReader("key="+yourInputString));
System.out.println("Escaped value: " + p.getProperty("key"));
Run Code Online (Sandbox Code Playgroud)

不雅,但功能齐全.