Convierta el carácter Unicode escapado a su carácter real

Tengo el siguiente valor en una variable de cadena en Java que tiene caracteres UTF-8 codificados como a continuación

Dodd\u2013Frank 

en lugar de

 Dodd–Frank 

(Supongamos que no tengo control sobre cómo se asigna este valor a esta variable de cadena)

¿Ahora cómo lo convierto (codifica) correctamente y lo vuelvo a almacenar en una variable String ?

Encontré el siguiente código

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

Pero esto devuelve un ByteBuffer , pero quiero un String vuelta.

Editar :

Algo más de información adicional.

Cuando uso System.out.println(str); yo obtengo

 Dodd\u2013Frank 

No estoy seguro de cuál es la terminología correcta (UTF-8 o Unicode). Perdón por eso.

tratar

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

de Apache Commons Lang

Puede aprovechar el hecho de que java.util.Properties admite cadenas con secuencias de escape ‘\ uXXXX’ y hacer algo como esto:

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

Inelegante, pero funcional.

Puede convertir ese búfer de bytes a String de esta manera:

 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; } 

Supongamos que tiene un valor Unicode, como 00B0 (símbolo de grado, o superíndice ‘o’, como en la abreviación en español de ‘primero’)

Aquí hay una función que hace exactamente lo que quiere:

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

Utilicé StringEscapeUtils.unescapeXml para unescape de la cadena cargada desde una API que da resultado XML.