在開發聊天軟件相關的時候遇到emoji表情
阿新 • • 發佈:2017-09-05
end stat com pattern util ext 聊天軟件 頭像 ati
在聊天軟件,如微信,在請求好友昵稱的時候,經常會遇到emoji格式的表情頭像,通常我們沖後臺獲取到的字符串都是<span class=\"emoji emoji2122\"></span> 這樣一個格式,
怎麽在textview中顯示出emoji表情呢?
其實很簡單,我們把對應的emoji的值取出來,轉換為16進制的值,直接給textview,textview就可以直接識別出來,不同版本識別的emoji是有區別的,最直接的就是android和ios。
可以直接復制EmojiUtils,調用convert就可以了,這個方法會把nickname中的emoji過濾,返回一個替換掉span的字符串回來。但是需要註意有些特殊的emoji表情是兩個emoji值表示出來的,不同版本顯示會有所不同。
public class EmojiUtils {
public static final String EMOJI_PATTERN =
"<span\\s+class\\s*=\\s*\\\\?\"emoji emoji(\\p{XDigit}+)\\\\?\"></span>";
public static String convert(String orignalName) {
if (orignalName == null || orignalName.isEmpty()) {
return orignalName;
}
Pattern p = Pattern.compile(EMOJI_PATTERN);
Matcher matcher = p.matcher(orignalName);
StringBuffer buffer = new StringBuffer();
while (matcher.find()) {
String emojiCode = matcher.group(1);
matcher.appendReplacement(buffer, getReplacement(emojiCode));
}
matcher.appendTail(buffer);
return buffer.toString();
}
private static String getReplacement(String emojiCode) {
int length = emojiCode.length();
String replacement = "?";
if (length == 4 || length == 5) {
replacement = emojiCodeToUnicode(emojiCode);
} else if (length == 6 || length == 8) {
if (length == 6) {
String start = emojiCodeToUnicode(emojiCode.substring(0, 2));
String end = emojiCodeToUnicode(emojiCode.substring(2, 6));
replacement = start + end;
} else {
String start = emojiCodeToUnicode(emojiCode.substring(0, 4));
String end = emojiCodeToUnicode(emojiCode.substring(4, 8));
replacement = start + end;
}
} else if (length == 10) {
String start = emojiCodeToUnicode(emojiCode.substring(0, 5));
String end = emojiCodeToUnicode(emojiCode.substring(5, 10));
replacement = start + end;
}
return replacement;
}
private static String emojiCodeToUnicode(String emojiCode) {
return new String(Character.toChars(Integer.parseInt(emojiCode, 16)));
}
}
在開發聊天軟件相關的時候遇到emoji表情