【问题标题】:Java doesn't decode passed string (with unicode)Java 不解码传递的字符串(使用 unicode)
【发布时间】:2020-10-27 04:03:05
【问题描述】:

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

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

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

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

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

当我打电话时

decodeUTF(sameStringFromDb);

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

【问题讨论】:

  • 那么...sameStringFromDb 包含什么?显然它不能包含相同的字符串。
  • 数据库包含:表情符号示例:\uD83D\uDE04
  • 相同的字符串,没有双引号。

标签: java utf-8 decode encode emoji


【解决方案1】:

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

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

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

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

如果无法修复数据输入,并且您想像 Java 编译器那样将文本“\uD83D”替换为单个字符,这已在其他问题中讨论过,例如参见 Convert escaped Unicode character back to actual character

【讨论】:

  • 非常感谢。 “属性”解决方案工作正常。目前无法更改数据输入。
猜你喜欢
  • 2016-03-20
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
相关资源
最近更新 更多