首页 > 解决方案 > Java 不解码传递的字符串(使用 unicode)

问题描述

我正在创建字符串(通过连接输入字符串和一些预定义的文本),将其保存到数据库中并将其传递给以下方法:

public String decodeUTF(String inputString) {
    byte[] bytes =  StringUtils.getBytesUtf8(inputString);
    return StringUtils.newStringUtf8(bytes);
}

当我打电话(并将结果发送到前台(android))时:

decodeUTF("Emoji example: \uD83D\uDE04");

它有效(显示表情符号)。

当我打电话时

decodeUTF(sameStringFromDb);

它传递整个字符串而不进行转换。

标签: javautf-8decodeencodeemoji

解决方案


在 Java 源代码中,\uD83D是一种转义码:编译器将其替换为一个代码单元

如果您\uD83D在数据库中看到,它不是转义码,它是六个单独字符'\' 'u' 'D' '8' '3' 'D' 的序列。

解决此问题并确保获得相同输出的正确方法是什么?

您必须问的一件事是为什么文本“\uD83D”首先会进入数据库。不应以这种方式破坏存储在数据库中的文本。听起来数据输入有错误。

如果无法修复数据输入,并且您想像 Java 编译器那样用单个字符替换文本“\uD83D”,这已经在其他问题中讨论过,例如将转义的 Unicode 字符转换回实际性格


推荐阅读