emoji存库以及乱码问题解决

来源:互联网 发布:matlab解矩阵方程组 编辑:程序博客网 时间:2024/06/05 07:21
emoji存库以及乱码问题解决

将emoji表情存入数据库的方法做了个总结,网上看了很多资料,进行亲测之后总结了两种方式,

第一种方式
该方式需要修改数据库,操作繁琐,自己在试验过程中出现了乱码问题,未能解决也没能发现问题出现在哪里.
修改mysql的字符集,将数据库的字符集修改成utf8mb4
将my.ini(win)文件配置修改,如下
[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.JDBC连接串的问题,有些项目在jdbc连接串里指定了编码,例如:
jdbc:mysql://localhost/mydb?characterEncoding=UTF-8
把红色部分去掉,问题解决。
2.字符集修改之后要将相关表结构中的表的字符集以及表中字段的字符集也修改为utf8mb4

注:该方式亲自试验,emoji存库之后存在乱码问题

第二种方式(推荐使用)
首先不需要修改数据库的字符集,使用utf8即可
1.引入依赖
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>3.2.0</version>
</dependency>
2.api使用
EmojiParser.parseToAliases(string); 将表情符号转为字符
EmojiParser.parseToUnicode(string); 将字符转为表情符号
在添加emoji的字段使用EmojiParser.parseToAliases(string);具体示例如下
@PostMapping("addArticle")
@ResponseBody
public String saveData(Article article){
try {
String articles = EmojiParser.parseToAliases(article.getArticle());//该字段为添加emoji的字段
article.setArticle(articles);
articleService.insert(article);
return "成功";
}catch (Exception e){
e.printStackTrace();
return "失败";
}
}
返回emoji的字段使用EmojiParser.parseToUnicode(string);具体示例如下
@PostMapping("queryArticle")
@ResponseBody
public Article getArticle(Long id) {
Article article = new Article();
article.setId(id);
article = articleService.getArticle(article);
String articles = EmojiParser.parseToUnicode(article.getArticle());//该字段为存有emoji的字段
article.setArticle(articles);
return article;
}

以上两种方法均能存储emoji,第一种方式是普遍的解决方案,但我经过 配置之后存入数据库的数据全是乱码,所以果断使用第二种方式,不需要修改数据库,只需要引入依赖调用其方法即可!

两种方式更多细节请参考一下两个链接
参考:http://www.jianshu.com/p/bda2d030b0ce
http://blog.csdn.net/applebomb/article/details/52755666
原创粉丝点击