Converter caractere Unicode com escape de volta ao caractere real

Eu tenho o seguinte valor em uma variável de seqüência de caracteres em Java que tem caracteres UTF-8 codificados como abaixo

Dodd\u2013Frank 

ao invés de

 Dodd–Frank 

(Suponha que eu não tenha controle sobre como esse valor é atribuído a essa variável de string)

Agora, como faço para converter (codificar) corretamente e armazená-lo de volta em uma variável String ?

Eu encontrei o seguinte código

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

Mas isso retorna um ByteBuffer , mas eu quero uma String volta.

Editar :

Mais algumas informações adicionais.

Quando eu uso System.out.println(str); eu recebo

 Dodd\u2013Frank 

Não tenho certeza qual é a terminologia correta (UTF-8 ou unicode). Perdoe-me por isso.

experimentar

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

de Apache Commons Lang

Você pode aproveitar o fato de que java.util.Properties suporta strings com seqüências de escape ‘\ uXXXX’ e faz algo assim:

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

Deselegante, mas funcional.

Você pode converter esse buffer de bytes em String assim:

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

Suponha que você tenha um valor Unicode, como 00B0 (símbolo de grau ou sobrescrito ‘o’, como na abreviação espanhola para ‘primero’)

Aqui está uma function que faz exatamente o que você quer:

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

Eu usei StringEscapeUtils.unescapeXml para StringEscapeUtils.unescapeXml escape da string carregada de uma API que fornece resultado XML.