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

Java中的stringvariables具有下面的值,它具有如下所示的UTF-8字符编码

Dodd\u2013Frank 

代替

 Dodd–Frank 

(假设我不能控制这个值如何分配给这个stringvariables)

现在我该如何转换(编码)它,并将其存储回一个Stringvariables?

我find了下面的代码

 Charset.forName("UTF-8").encode(str); 

但是,这返回一个ByteBuffer ,但我想要一个String回来。

编辑

一些更多的附加信息。

当我使用System.out.println(str); 我明白了

 Dodd\u2013Frank 

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

尝试

 str = org.apache.commons.lang3.StringEscapeUtils.unescapeJava(str); 

来自Apache Commons Lang

您可以利用java.util.Properties支持具有“\ uXXXX”转义序列的string的事实,并执行如下操作:

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

不雅,但function。

你可以把这个字节缓冲区转换成如下string:

 import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.ByteBuffer public static CharsetDecoder decoder = CharsetDecoder.newDecoder(); public static String byteBufferToString(ByteBuffer buffer) { String data = ""; try { // EDITOR'S NOTE -- There is no 'position' method for ByteBuffer. // As such, this is pseudocode. int old_position = buffer.position(); data = decoder.decode(buffer).toString(); // reset buffer's position to its original so it is not altered: buffer.position(old_position); } catch (Exception e) { e.printStackTrace(); return ""; } return data; } 

假设你有一个Unicode值,比如00B0(度数符号,或上标'o',就像西class牙语中的'primero'缩写)

这是一个function,只是你想要的:

 public static String unicodeToString( char charValue ) { Character ch = new Character( charValue ); return ch.toString(); } 

我使用StringEscapeUtils.unescapeXml来从给出XML结果的API加载string。