JAVA emoji表情存储数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 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())

猜你喜欢

转载自blog.csdn.net/qy_0626/article/details/83508050