在 Android 中为 Web 服务编码表情符号时遇到问题

Trouble encoding emoji's for web service in Android

我正在尝试向我的网络服务发送表情符号,然后稍后再接收该表情符号。

我到处都看到了两种解决方案:
1.)

URLEncoder.encode(msg_text, "UTF-8");  
URLDecoder.decode(msg_text, "UTF-8");

和 2.)

StringEscapeUtils.escapeJava(msg_text);  
StringEscapeUtils.unescapeJava(msg_text);

如果我使用StringEncoder,我可以发送"uD83DuDE0A"
如果我使用 URLEncoder,我可以发送“??”
如果我同时使用两者,无论顺序如何,我都可以发送“????????”

我试过将 mysql 数据库中的字符集更改为 "utf8mb4",但我可能没有做对。

我还检查了 URLEncoder 的文档,看是否可以将 "UTF-8" 更改为 "UTF-8mb4" 之类的内容,但那不存在。我试过 "UTF-16" 但那给了我一些奇怪的 unicode 字符。

我试过在发送之前用“\\”替换我的 msg_text 中的“\”,但没有接缝做任何事情。

我在这里发帖是因为我不知道我能做什么。谁能指出我正确的方向?提前致谢。

不要使用任何尝试转换编码的库;他们只会混淆问题。与其尝试使用 \uD83D\uDE0A,不如粘贴 Emoji 表情?

MySQL 需要 CHARACTER SET utf8mb4 表情符号; ut8 不够。

utf16 和 utf32 是为了完整性;不要使用它们。

我通过将每个字符转换为 Unicode 字符串解决了这个问题,这消除了任何 encoding/decoding 问题的可能性,但它创建了 6 倍的消息文本存储量。就我而言,这应该不是问题,这个解决方案已经足够好了。

这也消除了任何 SQL 注入的可能性。

实施:https://gist.github.com/nschultz14/a2334905eed3bf623b68642cc13899dc