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如下
问题2是自己当时在 EmojiParser 中扩展的 两个函数 如下:
运行测试如下:
String str = "aaaa
注: 文中的所有表和编码不对应,原因:在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
相关文章推荐
- 【Java开发常见问题解决】文本框表情emoji字符过滤处理方法
- Java常用文件目录处理代码集
- Java中数据库事务处理的实现-JSP教程,Java技巧及代码
- 批处理 API实现文件下载的代码第1/2页
- Java通过QQ群的API读取群组状态的代码
- Java API的Date, Calendar日期处理相关类分析
- 关于Java异常处理的学习代码
- 使用反射简化ajax中的处理代码(Java版)
- 在EasyJWeb中使用Java Excel API 处理电子表格
- 在EasyJWeb中使用Java Excel API 处理电子表格
- java时间类处理实例代码
- Java处理Word, Excel, PDF文档的4种开源系统的代码例子
- 在EasyJWeb中使用Java Excel API 处理电子表格
- 在EasyJWeb中使用Java Excel API 处理电子表格
- 在java代码中,用xslt处理xml文件
- java定时处理任务的代码
- 在EasyJWeb中使用Java Excel API 处理电子表格
- 在EasyJWeb中使用Java Excel API 处理电子表格
- 利用正则表达式获取特定文件(如java class)并对其进行处理(如代码统计)
- java常用字符串处理实例代码