日常小结:emoji表情转换utf-8编码字符串(存入数据库)/还原表情字符(页面展示)

直接贴上工具类

package com.epean.trade.framework.util;

import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by ccc on 2019-01-11.
 * emoji表情转换工具类
 */
public class EmojiUtils {
    /**
     * * @Description emoji表情转换
     * @param str 待转换字符串
     * @return 转换后字符串
     * @throws
     */
    public static String emojiConvertToUtf(String str)
            throws Exception {
        String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(
                        sb,
                        "[[" + URLEncoder.encode(matcher.group(1),
                                "UTF-8") + "]]");
            } catch (Exception e) {
                throw e;
            }
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * @Description 还原emoji表情的字符串
     *
     * @param str 转换后的字符串
     * @return 转换前的字符串
     * @throws
     */
    public static String utfemojiRecovery(String str)
            throws Exception {
        String patternString = "\\[\\[(.*?)\\]\\]";

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);

        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(sb,
                        URLDecoder.decode(matcher.group(1), "UTF-8"));
            } catch (Exception e) {
                throw e;
            }
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
}

然后在判断字符中是否包含表情时就变得很简单了,我是这样做的,
直接判断是否包含我定义好的[[ 的格式 虽然这种做法不太好, 可能字符串本身就包含[[ 但是过滤一遍应该不会有什么问题的

谨慎起见: https://blog.csdn.net/qianmang/article/details/53463925 // (个人没测试是否正确)作为参考

/**
         * 转码账户中的表情(去除表情转码一下就可以显示可爱的表情了)
         */
        for(ShopeeAccountDto shopeeAccountDto : list){
            if(shopeeAccountDto.getStoreAcct() != null) {
                if (shopeeAccountDto.getStoreAcct().indexOf("[[") != -1) { //直接判断是否包含我定义好的[[ 的格式   
                    //含有表情
                    shopeeAccountDto.setStoreAcct(EmojiUtils.utfemojiRecovery(shopeeAccountDto.getStoreAcct()));
                }
            }
        }

你可能感兴趣的:(java,技术博)