我正在创建字符串(通过连接输入字符串和一些预定义的文本(,将其保存到数据库中,并将其传递给以下方法:
public String decodeUTF(String inputString) {
byte[] bytes = StringUtils.getBytesUtf8(inputString);
return StringUtils.newStringUtf8(bytes);
}
当我打电话(并将结果发送到前台(安卓系统((:
decodeUTF("Emoji example: uD83DuDE04");
它有效(显示微笑(。
当我呼叫时
decodeUTF(sameStringFromDb);
它通过整个字符串whithout转换。
在Java源代码中,uD83D
是转义码:编译器将其替换为一个代码单元。
如果在数据库中看到uD83D
,它不是转义码,而是六个单独字符的序列'\'u'D'8'3''D'。
解决这个问题并确保获得相同输出的正确方法是什么?
你必须要问的一件事是,为什么文本";\uD83D";首先访问数据库。存储在数据库中的文本不应该以这种方式被破坏。听起来数据输入处有一个错误。
如果没有办法修复数据条目,并且您希望替换文本";\uD83D";对于像Java编译器一样的单个字符,这已经在其他问题中介绍过了,请参见例如将转义的Unicode字符转换回实际字符