为啥不支持来自其他设备的表情符号?

Posted

技术标签:

【中文标题】为啥不支持来自其他设备的表情符号?【英文标题】:Why are emoticons from other device not supported?为什么不支持来自其他设备的表情符号? 【发布时间】:2015-03-13 00:39:14 【问题描述】:

我正在 android 上开发一个聊天应用程序,使用的表情库来自:https://github.com/ankushsachdeva/emojicon

这是我使用的第二个库,几乎同样的问题,我尝试了所有我知道的,搜索但问题仍然存在。

EmoticonEditText 正确渲染发送的表情,但不能正确渲染接收到的消息。

像这样:

即时通讯的工作原理如下:

设备 A:

用户发送表情

EmoticonEditTexts 列表视图更新

存储在本地存储中的消息 (SQLite)

消息发送到服务器。

设备 B:

从服务器收到的消息

消息存储在本地存储 (SQLite)

EmoticonEditTexts 列表视图更新

注意事项

1- 每个设备都可以正确渲染自己发送的表情消息,但不能正确渲染来自其他设备的表情消息。

2-我在数据库中的消息表具有 UTF-8_general_ci 排序规则,但消息显示为 ğğğğ¤ğ

3- 这是http请求发送消息的参数:

    String params = "username="+ URLEncoder.encode(this.username,"UTF-8") + 
            "&password="+ URLEncoder.encode(this.password,"UTF-8") + 
            "&to=" + URLEncoder.encode(tousername,"UTF-8") +
            "&message="+ URLEncoder.encode(message,"UTF-8") +
            "&action="  + URLEncoder.encode("sendMessage","UTF-8")+
            "&";    

4- 表情符号的名称如下 emoji_00a9.png

导致问题的原因是什么?

如何解决(步骤清晰简单)?

【问题讨论】:

这意味着您没有正确存储非 BMP 字符。 @SLaks 有什么建议吗?我认为它们正确存储在 SQLite 上,但没有存储在服务器中,这就是我需要帮助的原因。 【参考方案1】:

确保字段/表格使用utf8mb4 字符集。这将允许它在 BMP 之外正确存储字符。

【讨论】:

@Igancio 我用过:ALTER TABLE messages CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;我对所有表格、字段都进行了尝试;一个接一个。也适用于整个数据库。它说查询有效,但是当我打开数据库结构时,此更改不适用于所有表,也不适用于所有字段。这与问题有关吗? 您是否重新填充了表格?现有数据仍会损坏。 感谢您对我的帮助。是的,我这样做了很多次,也尝试过 utf8mb4_general_ci;现在整个数据库是 utf8mb4_general_ci 并且那些奇怪的 ğğğğ¤ğ 消失了,但空盒子字符取而代之。这是一个好兆头,还有其他建议吗?

以上是关于为啥不支持来自其他设备的表情符号?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我手机在空间里发了emoji表情 却显示符号 该怎么弄

为啥红色心形表情符号需要两个代码点,而其他彩色心形需要一个?

为啥不和谐机器人适用于默认表情符号,而当我放置自定义表情符号时不起作用?

如何在其他设备上显示我的键盘扩展的表情符号

如何从字符串中删除表情符号字符?

如何正确编码为啥使用节点请求模块的表情符号?