对于mysql数据库存储emoji出现的问题,可以把表改成 CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci,最好在新建库的时候就选择。
my.cnf里也加上
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
1、公众号菜单、客户消息发送带emoji的json
客服消息接口发送
html端配置
{
"button":[
{
"type":"view",
"name":"🔥红红",
"url":"http://baidu.com"
}
]
}
后台程序收到前端
String s = "{\n" +
" \"button\":[\n" +
" { \n" +
" \"type\":\"view\",\n" +
" \"name\":\"\uD83D\uDD25红红\",\n" +
" \"url\":\"http://baidu.com\"\n" +
" }\n" +
" ]\n" +
"}";
发送到微信端的转成softbank版的小写再发送
String s = "{\n" +
" \"button\":[\n" +
" { \n" +
" \"type\":\"view\",\n" +
" \"name\":\"\ue11d红红\",\n" +
" \"url\":\"http://baidu.com\"\n" +
" }\n" +
" ]\n" +
"}";
怎么把"\uD83D\uDD25"转成"\ue11d",可以创建映射的map来替换
String s = "\uD83D\uDD25红红";
Map<String, String> emoji = new HashMap<String,String>();
emoji.put(":point_right:","\\ue231");//👉
emoji.put(":point_left:","\\ue230");//👈
emoji.put(":point_down:","\\ue22f");//👇
emoji.put(":point_up_2:","\\ue22e");//👆
emoji.put(":fire:","\\ue11d");//🔥
emoji.put(":+1:","\\ue00e");//👍
emoji.put(":bell:","\\ue325");//🔔
emoji.put(":facepunch:","\\ue00d");//👊
emoji.put(":joy:","\\ue056");//😊
s = EmojiParser.parseToAliases(s);
for(String key : emoji.keySet()){
s = s.replace(key,emoji.get(key));
}
2、公众号事件消息回复带emoji的xml
因为事件回复的是xml,直接在内容回复如"\uD83D\uDD25红红"这样是没有问题的