将转义的Unicode字符转换回实际的字符
Java中的stringvariables具有下面的值,它具有如下所示的UTF-8字符编码
Dodd\u2013Frank
代替
Dodd–Frank
(假设我不能控制这个值如何分配给这个stringvariables)
现在我该如何转换(编码)它,并将其存储回一个String
variables?
我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。