我在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)。请原谅
8条答案
按热度按时间h22fl7wq1#
尝试
Apache Commons Lang
im9ewurl2#
java.util.Properties
你可以利用
java.util.Properties
支持带有\uXXXX
转义序列的字符串这一事实,并执行如下操作:不优雅,但功能。
为了处理可能的
IOExeception
,您可能需要try-catch。ctehm74n3#
尝试
str = org.apache.commons.text.StringEscapeUtils.unescapeJava(str);
因为org.apache.commons.lang3.StringEscapeUtils已弃用。
vwoqyblh4#
假设您有一个Unicode值,例如00B0(度数符号,或上标'o',如西班牙语中'primero'的缩写)
下面是一个函数,它可以做你想要的:
g52tjvyc5#
我使用
StringEscapeUtils.unescapeXml
来取消转义从API加载的字符串,该API提供XML结果。xam8gpfp6#
从
org.apache.commons:commons-text
到UnicodeUnescaper
也是可以接受的。new UnicodeUnescaper().translate("Dodd\u2013Frank")
cxfofazt7#
也许下面的解决方案可以正确解码字符串而不需要任何额外的依赖关系。
这在scala repl中可以工作,但在Java中也可以工作。
798qvoo88#
你可以像这样将字节缓冲区转换为字符串: