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.