我在Java中的字符串变量,其具有编码象下面UTF-8字符以下的值
Dodd\u2013Frank
代替
Dodd–Frank
(假设我没有超过这个数值是如何分配给该字符串变量控制)
现在我该如何转换(编码),它得当,它存回一个String
变量?
我发现下面的代码
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);
从阿帕奇共享郎
你可以利用这一java.util.Properties支持字符串以'为\ uXXXX转义序列的事实优势,做这样的事情:
Properties p = new Properties();
p.load(new StringReader("key="+yourInputString));
System.out.println("Escaped value: " + p.getProperty("key"));
不雅,但功能。
假设你有一个Unicode值,如00B0(度数符号,或者标“O”,在西班牙语缩写“PRIMERO”)
这里是一个函数,你想要什么,不只是:
public static String unicodeToString( char charValue )
{
Character ch = new Character( charValue );
return ch.toString();
}
我用StringEscapeUtils.unescapeXml
反转义从,让XML结果的API加载的字符串。
您可以在字节的缓冲区转换为字符串是这样的:
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;
}
也许下面的解决方案,该字符串没有任何额外的依赖关系正确解码。
这部作品在Scala的REPL,但应该只是在Java中唯一的解决方案一样好。
import java.nio.charset.StandardCharsets
import java.nio.charset.Charset
> StandardCharsets.UTF_8.decode(Charset.forName("UTF-8").encode("Dodd\u2013Frank"))
res: java.nio.CharBuffer = Dodd–Frank