得到“???”在 XMPP 离线模式下发送表情符号时

Posted

技术标签:

【中文标题】得到“???”在 XMPP 离线模式下发送表情符号时【英文标题】:getting "????" while sending emoji in XMPP offline mode 【发布时间】:2016-08-15 12:32:04 【问题描述】:

我正在使用 XMPP 框架开发带有 OpenFire 服务器的聊天应用程序。 一切正常,只有我面临一个问题:

当用户 B 离线时,当用户 A 向用户 B 发送“表情符号”时,用户 B 将通过 php 服务器收到推送通知。

当用户上线时,我收到了所有的消息

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message

方法。 看起来不错,但是当用户 B 收到表情符号时,它会转换为“??????” 就像我收到 This In 消息内容一样:

<message xmlns="jabber:client" type="chat" to=“receiver” from=“sender”><body>????</body><delay xmlns="urn:xmpp:delay" from="52.208.58.179" stamp="2016-08-15T12:16:59.039Z"></delay></message>

同样的事情在普通短信中也能正常工作,不知道为什么我会收到“????”在离线模式下。在在线模式下工作的代码相同。

【问题讨论】:

Emojis 是 unicode 字符,您需要在发送和接收 emoji 字符时记住这一点。 谢谢,伙计,但正如我所说,它在在线模式下工作正常,只有离线模式我得到了这个 在线消息会立即转发给接收者。离线消息由 OpenFire 存储在数据库中,请检查相关表中文本消息字段的数据类型。检查它是否支持 unicode 字符。 好主意@AdilSoomro,如果你不介意的话,你能解释一下我可以从哪里检查来自 operfire 的消息的数据类型,因为我是开火新手。 我不确定,它可能使用嵌入式数据库或外部 sql。您需要通过他们的论坛找出数据库的位置。实际上,我们有另一个人来调查它。所以我自己不确定位置和结构。 【参考方案1】:

您需要确保您的数据库已正确配置为处理 4 字节 unicode 字符。例如 mysql 需要使用 utf8mb4 编码,而不仅仅是 utf8。这是最常见的错误情况。

【讨论】:

以上是关于得到“???”在 XMPP 离线模式下发送表情符号时的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iphone sdk 的 xmpp 中发送带有消息的笑脸/情感(图像)?

在 asmack 中没有收到大量离线消息 [关闭]

如何在 xmpp smack 或 asmack 中将文件发送给离线用户?

当用户在Android中使用XMPP离线时向用户发送通知

如何在 ios 中使用 XMPP 接收离线消息

Discord.js 发送表情符号