无法为Android中的网络服务编码表情符号

时间:2016-03-11 17:10:34

标签: android mysql utf-8 amazon-ec2 amazon-rds

我正在尝试将表情符号发送到我的网络服务,然后再收到表情符号。

我看过的每个地方,我都看到了两个解决方案:
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中的“\”,然后发送它并且没有接缝做任何事情。

我在这里发帖是因为我对自己能做的事情缺乏想法。有人能指出我正确的方向吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

不要使用任何试图转换编码的库;他们只是混淆了这个问题。而不是试图使用\uD83D\uDE0A,你不能粘贴表情符号吗?

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

utf16和utf32是完整的;不要使用它们。

答案 1 :(得分:0)

我通过将每个字符转换为Unicode字符串解决了这个问题,这消除了编码/解码问题的任何可能性,但它创建了正常数量的消息文本存储的6倍。在我的情况下,这不应该是一个问题,这个解决方案是足够好的。

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

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