java後臺處理APP表情

1,在APP開發中,大多須要涉及表情符號豐富APP的親和力,可是由於咱們的數據庫通常是utf8編碼,是3個字節,而表情符號基本都是四個字節的unicode編碼。如下是經過emoji-Java解決數據庫不能存儲4字節表情符號的問題。html

2,在你的pom文件中導入如下座標,可能不是最新的,須要最新的請到github搜索java

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


4,用到的檢測是否有表情符號的工具類git

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,附加,可能用到的其餘處理表情的工具類github

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使用web

//轉換表情
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
版權聲明:本文爲博主原創文章,轉載請附上博文連接!apache

相關文章
相關標籤/搜索