zoukankan      html  css  js  c++  java
  • java后台处理APP表情

    1,在APP开发中,大多需要涉及表情符号丰富APP的亲和力,但是因为我们的数据库一般是utf8编码,是3个字节,而表情符号基本都是四个字节的unicode编码。以下是通过emoji-Java解决数据库不能存储4字节表情符号的问题。

    2,在你的pom文件中导入以下坐标,可能不是最新的,需要最新的请到github搜索

    <dependency>
    <groupId>com.vdurmont</groupId>
    <artifactId>emoji-Java</artifactId>
    <version>3.1.3</version>
    </dependency>


    4,用到的检测是否有表情符号的工具类

    package com.lcm.up.nweb2.common.uitls;
    
    import java.util.List;
    
    import com.vdurmont.emoji.EmojiParser;
    
    public class EmojiDealUtil extends EmojiParser {
    /** 
    * 获取非表情字符串 
    * @param input 
    * @return 
    */ 
    public static String getNonEmojiString(String input) { 
    int prev = 0; 
    StringBuilder sb = new StringBuilder(); 
    List<UnicodeCandidate> replacements = getUnicodeCandidates(input); 
    for (UnicodeCandidate candidate : replacements) { 
    sb.append(input.substring(prev, candidate.getEmojiStartIndex())); 
    prev = candidate.getFitzpatrickEndIndex(); 
    } 
    return sb.append(input.substring(prev)).toString(); 
    } 
    
    /** 
    * 获取表情字符串 
    * @param input 
    * @return 
    */ 
    public static String getEmojiUnicodeString(String input){ 
    EmojiTransformer transformer = new EmojiTransformer() { 
    public String transform(UnicodeCandidate unicodeCandidate) { 
    return unicodeCandidate.getEmoji().getHtmlHexadecimal(); 
    } 
    }; 
    StringBuilder sb = new StringBuilder(); 
    List<UnicodeCandidate> replacements = getUnicodeCandidates(input); 
    for (UnicodeCandidate candidate : replacements) { 
    sb.append(transformer.transform(candidate)); 
    } 
    return parseToUnicode(sb.toString()); 
    }
    
    public static String getUnicode(String source){ 
    String returnUniCode=null; 
    String uniCodeTemp=null; 
    for(int i=0;i<source.length();i++){ 
    uniCodeTemp = "\u"+Integer.toHexString((int)source.charAt(i)); 
    returnUniCode=returnUniCode==null?uniCodeTemp:returnUniCode+uniCodeTemp; 
    } 
    return returnUniCode; 
    } 
    }
    

      


    5,附加,可能用到的其他处理表情的工具类

    package com.lcm.up.nweb2.common.uitls;
    
    import org.apache.commons.lang3.StringUtils;
    
    /**
    * 表情处理工具
    * @ClassName: FilterEmojiUtil
    * </p>
    * @author chenxingfei
    * @date 2017年4月7日 上午9:59:49
    *
    */
    public class FilterEmojiUtil {
    /**
    * emoji表情替换
    *
    * @param source 原字符串
    * @param slipStr emoji表情替换成的字符串 
    * @return 过滤后的字符串
    */
    public static String filterEmoji(String source,String slipStr) {
    if(StringUtils.isNotBlank(source)){
    return source.replaceAll("[\ud800\udc00-\udbff\udfff\ud800-\udfff]", slipStr);
    }else{
    return source;
    }
    }
    /**
    * 判断是否包含emoji表情
    *
    * @param source 原字符串
    * @param slipStr emoji表情替换成的字符串 
    * @return 过滤后的字符串
    */
    public static boolean checkEmoji(String source) {
    if(StringUtils.isNotBlank(source)){
    return	source.matches("[\ud800\udc00-\udbff\udfff\ud800-\udfff]");
    }else{
    return false;
    }
    }
    }


    6,emoji-Java使用

    //转换表情
    if(StringUtils.isNotBlank(EmojiDealUtil.getEmojiUnicodeString("被检测内容"))){
    String hexadecimal = EmojiParser.parseToHtmlHexadecimal(“将被检测内容中的表情符号替换为表情符号的html的十六进制和数据,类似于&#x1f609”);
    taskPaidInteractVo.setInteractContent(hexadecimal);
    }

    反解析,将存入数据库的&#x1f609转换为表情对应的4字节Unicode编码,这样移动端才能识别

    //转换表情
    String interactContent = EmojiParser.parseToUnicode("被转换内容,会将html的十六进制和数据转换为表情对应的4字节Unicode编码");
    interactVo.setInteractContent(interactContent );

    7,emoji-Java提供了多种转换方式,同列举的就一种,其他的也类似
    ---------------------
    作者:Itxingfeichen
    来源:CSDN
    原文:https://blog.csdn.net/xingfeichen/article/details/69948573
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    逐级汇总示例(循环逐级累计法).sql
    UdtSsn.cs
    2013届大华股份 软件算法类试题 D卷
    TCP与UDP区别
    浙江大华 研发类试题
    百度面试经历
    Contiki入门学习
    09网易校园招聘笔试题
    (转载)利用webkit抓取动态网页和链接
    2012.9.23 搜狗笔试
  • 原文地址:https://www.cnblogs.com/lixxx/p/10938701.html
Copyright © 2011-2022 走看看