为啥不支持来自其他设备的表情符号?
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 并且那些奇怪的 ğğğğ¤ğ 消失了,但空盒子字符取而代之。这是一个好兆头,还有其他建议吗?以上是关于为啥不支持来自其他设备的表情符号?的主要内容,如果未能解决你的问题,请参考以下文章
为啥红色心形表情符号需要两个代码点,而其他彩色心形需要一个?