java后台处理APP表情

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

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

   
	com.vdurmont
	emoji-Java
	3.1.3
   
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 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 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
5,附加,可能用到的其他处理表情的工具类

package com.lcm.up.nweb2.common.uitls;

import org.apache.commons.lang3.StringUtils;

/**
 * 表情处理工具
 * @ClassName: FilterEmojiUtil
 * 

* @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的十六进制和数据,类似于😉”);
		taskPaidInteractVo.setInteractContent(hexadecimal);
	}

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

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

7, emoji-Java提供了多种转换方式,同列举的就一种,其他的也类似

 
  

你可能感兴趣的:(java后台处理APP表情)