您的位置:首页 > 编程语言 > Java开发

Emoji 表情在Java代码中处理api

2016-08-11 10:38 621 查看
客户端提交带有emoji表情字符串一般会有如下处理       

注: 文中的所有表和编码不对应,原因:在eclipse中编辑的表情在该处不能正常显示,所有就随便用了个当前编辑器的表情

         (表情字符串  是  客户端提交到server 的数据使用String 变量接收的值  一般utf8编码 )

1、判断字符串是否是表情

2、获取字符串的所有表情字符串  或  所有非表情字符串

3、将表情字符串转成 HtmlDecimal  如:

 ->    ;#128516;

4、将表情字符串转成 Hexadecimal  如 :

 ->  ;#x1f466;

5、将表情字符串转成Unicode

6、  (3,4,5)的翻转

7、表情语义分析

解决思路:

1、需要有一张 emoji 表情 、htmlDecimal  、 hexadecimal 、 语义映射表

2、有了数据表,剩下的就是API的处理了 , O(∩_∩)O哈哈~

正好在github 有该jar包和数据  

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

该jar包中有个emojis.json的文件就是上面提到的映射表  结构如下:

{

    "emoji": "

",

    "description": "smiling face with open mouth and smiling eyes",

    "aliases": [

      "smile"

    ],

    "tags": [

      "happy",

      "joy",

      "pleased"

    ]

  },  ............

可以看到 json 数据中有 语义和标签  ,HtmlDecimal  和 Hexadecimal   经过EmojiLoader : :loadEmojis 解析之后就有了(jar包中总共之后6个Java文件)

问题1、 3 、 4 、6  EmojiParser  ,  EmojiManager  能找到对应的函数 

大家可以看源码 或者
 https://github.com/vdurmont/emoji-java  

问题5如下

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;
}


问题2是自己当时在 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());
}


运行测试如下:
String str = "aaaa
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  表情 emoji emoji-java