您的位置:首页 > 移动开发

java后台处理APP表情

2017-04-10 15:14 211 查看
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的十六进制和数据,类似于😉”);
taskPaidInteractVo.setInteractContent(hexadecimal);
}


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

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


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


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: