java - Java 不解码传递的字符串(使用 unicode)
问题描述
我正在创建字符串(通过连接输入字符串和一些预定义的文本),将其保存到数据库中并将其传递给以下方法:
public String decodeUTF(String inputString) {
byte[] bytes = StringUtils.getBytesUtf8(inputString);
return StringUtils.newStringUtf8(bytes);
}
当我打电话(并将结果发送到前台(android))时:
decodeUTF("Emoji example: \uD83D\uDE04");
它有效(显示表情符号)。
当我打电话时
decodeUTF(sameStringFromDb);
它传递整个字符串而不进行转换。
解决方案
在 Java 源代码中,\uD83D
是一种转义码:编译器将其替换为一个代码单元。
如果您\uD83D
在数据库中看到,它不是转义码,它是六个单独字符'\' 'u' 'D' '8' '3' 'D' 的序列。
解决此问题并确保获得相同输出的正确方法是什么?
您必须问的一件事是为什么文本“\uD83D”首先会进入数据库。不应以这种方式破坏存储在数据库中的文本。听起来数据输入有错误。
如果无法修复数据输入,并且您想像 Java 编译器那样用单个字符替换文本“\uD83D”,这已经在其他问题中讨论过,例如将转义的 Unicode 字符转换回实际性格
推荐阅读
- python - 如何更改 DataFrame 中值的长度
- python - 附加到来自 SQL 的列表结果
- ios - 在 iOS 运行时禁用 crashlytics/Fabric
- out-of-memory - ArrayFire CPU,它会因为迟到的GC而耗尽内存吗?
- javascript - 无法使用 jquery 插件从图像裁剪中获取值
- javascript - 如何在 Google Apps 脚本中按文件路径过滤
- r - 安装 R 包错误:安装二进制包失败
- angularjs - AngularJS自定义过滤器过滤项目类型
- git - 使用 git 推送或拉取时如何抑制存储库 url?
- c# - Windows 10 上的蓝牙 LE 外设角色