在之前的一篇博文中,我写了之前自己遇到的一个emoji表情显示问题,后来通过转码的方式解决了。不过后来我觉得,自己对这个问题的研究不够深入,于是专门写了这篇文章来记录。

1、mysql数据库可以直接存储emoji,查询展示均不需要进行转码等额外处理;

2、Java中有时候需要对emoji进行编码和解码,可以使用到Java Emoji Converter

pom文件中添加依赖

<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>java-emoji-converter</artifactId>
    <version>0.1.1</version>
</dependency>

3、将unicode编码转换为emoji

/**
 * 将emojiStr转为带有表情的字符
 * @return
 */
@Test
public void emojiConverter2Unicode() {
	String emojiStr = "🙏🙂";
	EmojiConverter emojiConverter = EmojiConverter.getInstance();
	String result = null;
	if (null != emojiStr && emojiStr.length() > 0) {
		result = emojiConverter.toUnicode(emojiStr);
	}
	System.out.println(result);
}

执行结果为“🙏🙂”,一个祈祷,一张笑脸。

4、将emoji转义为描述文字

/**
 * 带有表情的字符串Emoji转义为关键字,类似:xiao:。
 *
 * @return
 */
@Test
public void emojiConverter2Alias() {
	String str = "\uD83D\uDE4F\uD83D\uDE42";
	EmojiConverter emojiConverter = EmojiConverter.getInstance();
	String result = null;
	if (null != str && str.length() > 0) {
		result = emojiConverter.toAlias(str);
	}
	System.out.println(result);
}

执行结果为“:pray::slightly_smiling:”,祈祷和微笑。

5、emoji转码成unicode

/**
 * 带有表情的字符串Emoji转义为unicode,类似🙆。
 * @return
 */
@Test
public void emojiConverter2Html() {
	String emoji = "\uD83D\uDE4F\uD83D\uDE42";
	EmojiConverter emojiConverter = EmojiConverter.getInstance();
	String result = null;
	if (null != emoji && emoji.length() > 0) {
		result = emojiConverter.toHtml(emoji);
	}
	System.out.println(result);
}

执行结果为“&#128591;&#128578;”。

可以发现,toHtml和toUnicode方法的处理方式刚好相反。