版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qy_0626/article/details/83508050
App内做帖子评论,涉及到手机输入法自带的emoji表情,评论时存储数据库报错,然后找了一个解决办法,那就是过滤掉emoji表情,但是有被提出要实现可以评论表情的功能,因此有了此博客
解决方案:
1.存储时将字符串转换为可存储的编码格式
2.App展示评论时,将编码格式转为手机端可以看见的表情
实现前提:
1.需要第三方一个jar来处理emoji表情
如果是maven项目则引入一下依赖
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>3.2.0</version>
</dependency>
如果不是maven,可以去我的百度网盘下载jar包:
链接:https://pan.baidu.com/s/1wdqF0mdXikY7TQIqgana_w
提取码:0bl7
以下是JAVA代码:
创建一个util工具类,此类中包含表情编码格式转换、以及过滤表情的方法,端看要实现那种
package com.net.util;
import org.apache.commons.lang.StringUtils;
import com.vdurmont.emoji.EmojiParser;
/**
* 表情处理类
* @author Administrator
*
*/
public final class EmojiUtil {
/**
* 将emojiStr转为 带有表情的字符
* 将数据库查询字符转为表情符号
* @param emojiStr
* @return
*/
public static String emojiConverterUnicodeStr(String emojiStr){
String result = EmojiParser.parseToUnicode(emojiStr);
return result;
}
/**
* 带有表情的字符串转换为编码
* 将表情符号转为字符后存储到数据库
* @param str
* @return
*/
public static String emojiConverterToAlias(String str) {
String result=EmojiParser.parseToAliases(str);
return result;
}
/**
* 检查是否有emoji表情字符
* @param str
* @return
*/
public static boolean containsEmoji(String str) {
if(StringUtil.isBlank(str)){
return false;
}
int len = str.length();
for(int i=0;i<len;i++){
char codePoint = str.charAt(i);
if(isEmojiCharacter(codePoint)){
return true;
}
}
return false;
}
private static boolean isEmojiCharacter(char codePoint) {
return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
|| (codePoint == 0xD)
|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}
/**
* 过滤emoji 或者 其他非文字类型的字符
*
* @param source
* @return
*/
public static String filterEmoji(String source) {
if (StringUtils.isBlank(source)) {
return source;
}
StringBuilder buf = null;
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (isEmojiCharacter(codePoint)) {
if (buf == null) {
buf = new StringBuilder(source.length());
}
buf.append(codePoint);
}
}
if (buf == null) {
return source;
} else {
if (buf.length() == len) {
buf = null;
return source;
} else {
return buf.toString();
}
}
}
}
使用时直接调用util中对应的方法进行格式转换
//转换表情编码为可存储数据库格式的编码
String str = EmojiUtil.emojiConverterToAlias(bac.getBack_content());
//App展示时 处理数据库存储的表情字符 为App可以显示的字符
EmojiUtil.emojiConverterUnicodeStr(item.getBack_content())