我正在尝试向我的网络服务发送表情符号,然后稍后接收该表情符号。
无论我在哪里看,我都看到了两种解决方案:
1.)
URLEncoder.encode(msg_text, "UTF-8");
URLDecoder.decode(msg_text, "UTF-8");
和 2.)
StringEscapeUtils.escapeJava(msg_text);
StringEscapeUtils.unescapeJava(msg_text);
如果我使用字符串编码器,我可以发送"uD83DuDE0A"
如果我使用 URLEncoder,我可以发送"??"
如果我同时使用两者,无论按顺序,我都可以发送"????????"
我尝试将mysql数据库中的字符集更改为" utf8mb4",但有可能我没有做对。
我还检查了URLEncoder的文档,看看是否可以将"UTF-8"更改为"UTF-8mb4"之类的内容,但这并不存在。我尝试了"UTF-16",但这给了我一些奇怪的 unicode 字符。
在发送之前,我尝试将msg_text中的"\"替换为"\\",但这并没有做任何事情。
我在这里发帖是因为我不知道我能做什么。 谁能指出我正确的方向?提前谢谢。
不要使用任何试图转换编码的库;它们只会混淆问题。 与其尝试使用uD83DuDE0A
,不如粘贴表情符号吗?
MySQL 需要CHARACTER SET utf8mb4
表情符号; ut8
是不够的。
UTF16 和 UTF32 是为了完整性;不要使用它们。
我通过将每个字符转换为 Unicode 字符串来解决此问题,这消除了编码/解码问题的任何可能性,但它创建了正常消息文本存储量的 6 倍。就我而言,这应该不是问题,而且这个解决方案已经足够好了。
这也消除了SQL注入的任何可能性。
实施:https://gist.github.com/nschultz14/a2334905eed3bf623b68642cc13899dc