我正在尝试将表情符号发送到我的网络服务,然后再收到表情符号。
我看过的每个地方,我都看到了两个解决方案:
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数据库中的characterset更改为“utf8mb4”,但有可能我没有做到这一点。
我还查看了URLEncoder的文档,看看我是否可以将“UTF-8”更改为“UTF-8mb4”,但不存在。我试过“UTF-16”,但这给了我一些奇怪的unicode字符。
我已经尝试用“\\”替换我的msg_text中的“\”,然后发送它并且没有接缝做任何事情。
我在这里发帖是因为我对自己能做的事情缺乏想法。有人能指出我正确的方向吗?提前谢谢。
答案 0 :(得分:0)
不要使用任何试图转换编码的库;他们只是混淆了这个问题。而不是试图使用\uD83D\uDE0A
,你不能粘贴表情符号吗?
MySQL需要CHARACTER SET utf8mb4
表情符号; ut8
是不够的。
utf16和utf32是完整的;不要使用它们。
答案 1 :(得分:0)
我通过将每个字符转换为Unicode字符串解决了这个问题,这消除了编码/解码问题的任何可能性,但它创建了正常数量的消息文本存储的6倍。在我的情况下,这不应该是一个问题,这个解决方案是足够好的。
这也消除了SQL注入的任何可能性。
实施:https://gist.github.com/nschultz14/a2334905eed3bf623b68642cc13899dc