utf8 parse example convertir codificar java unicode utf-8 utf8-decode

java - parse - Convierta el carácter Unicode escapado a su carácter real



string to byte utf 8 java (5)

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.


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.


tratar

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

de Apache Commons Lang