在 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
我正在尝试向我的网络服务发送表情符号,然后稍后再接收该表情符号。
我到处都看到了两种解决方案:
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