android系统自带Emoji表情与表情描述互相转换
来源:互联网 发布:淘宝卖家中心怎么进入 编辑:程序博客网 时间:2024/05/17 02:59
前言
Emoji表情几乎都是有表情描述的,如愤怒的表情会有[愤怒],这样的描述,这里就是举了个列子,至于是什么样的表现形势,这是可以自己定义的。那么这样,一个表情带一个表情描述的好处就是,当我们发送信息时,数据存入数据库后不会直接存储Emoji表情图片,而是直接存储表情描述这个字符串。
但是android 系统自带的Emoji表情描述是什么呢?似乎不知道,网上查了很多资料,说emoji有个自己的规则什么的。呃。。。表示看了半天没看懂。。。,于是乎就研究,系统自带的emoji如果打印成字符串是个什么鬼呢?
正文
于是乎我们进行了打印,打印之后效果图如下:
public class EmojiActivity extends Activity { private TextView tv; private EditText et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_emoji); initView(); viewOper(); } private void initView() { tv = findView(R.id.tv); et = findView(R.id.et); } private void viewOper() { tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println(et.getText().toString()); } }); } private <T> T findView(int id) { return (T) findViewById(id); }}
打印的结果:
一个不知道是什么的字符,这样存入数据库只会是一串问号,一朋友的是直接存不进去。查资料说要升级数据库,我勒个去,这样我肯定是不会去干的,因为不会后台呀。因此我就想到了把这个字符串拆分为字符对应的字符试试。
于是乎,就写了这样一段代码。
/** * 将系统表情转化为字符串 * * @param s * @return */ public static String getString(String s) { int length = s.length(); String context = ""; //循环遍历字符串,将字符串拆分为一个一个字符 for (int i = 0; i < length; i++) { char codePoint = s.charAt(i); //判断字符是否是emoji表情的字符 if (isEmojiCharacter(codePoint)) { //如果是将以大括号括起来 String emoji = "{" + Integer.toHexString(codePoint) + "}"; context = context + emoji; continue; } context = context + codePoint; } return context; } /** * 是否包含表情 * * @param codePoint * @return 如果不包含 返回false,包含 则返回true */ private static boolean isEmojiCharacter(char codePoint) { return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF))); }
说下这段代码的流程吧,显示设置进去一个字符串,然后遍历循环判断每个字符是否为emoji表情。emoji表情的字符比普通字符大一些。别看上图输出的是一个‘口’字,但是他占用了两个字符。因此判断完后转化为数字并以转化为16进制的字符串。并以大括号来分隔开来。
那么转化后的样子就是这样的。
可以看出没转换后的‘口’字符是两个字符。这样我们就转化成功了,可以直接存入数据库了。那么我们如果要从数据库读取出来然后进行显示emoji表情呢。这个就简单了,直接进行正则匹配后截取中间的16进制转化为字符然后拼接为字符串就是了。
代码如下:
/** * 将表情描述转换成表情 * * @param str * @return */ public static String getEmoji(Context context, String str) { String string = str; String rep = "\\{(.*?)\\}"; Pattern p = Pattern.compile(rep); Matcher m = p.matcher(string); while (m.find()) { String s1 = m.group().toString(); String s2 = s1.substring(1, s1.length() - 1); String s3; try { s3 = String.valueOf((char) Integer.parseInt(s2, 16)); string = string.replace(s1, s3); } catch (Exception e) { e.printStackTrace(); } } return string; }
将emoji表情描述转化过来后的结果如下图:
然后将转化的结果设置展示组件就可以了,这样我们系统自带emoji表情与表情描述就这样转换完了。
- android系统自带Emoji表情与表情描述互相转换
- 在Android系统中使用系统自带的emoji表情
- 在Android系统中使用系统自带的emoji表情
- 用android 自带base64 解决 Emoji表情问题
- Android自带的emoji表情的使用
- Android自带的emoji表情的使用
- Android自带的emoji表情的使用
- 微信emoji表情及输入法自带表情存储与显示
- Android将系统emoji表情转换成十进制字符串
- Emoji表情转换
- 处理iOS Android emoji系统表情
- iOS中如何禁用系统自带的Emoji表情键盘
- Android Emoji表情方案
- Android Emoji表情开发
- Android的Emoji表情
- Android过滤emoji表情
- Android 禁止emoji 表情
- Mac OS X 自带输入法输入Emoji表情与颜文字
- php获取客户端真实IP地址
- 00003 不思议迷宫.0008:分析了半天我们能干什么?
- Sqoop-1.4.6安装部署及详细使用介绍
- 史上最易懂的Android jni开发资料--NDK环境搭建
- Android<我所理解的Service>
- android系统自带Emoji表情与表情描述互相转换
- Unity资源热更之AssetBundle(3)———新版本AssetBundle
- CSS vw让overflow:auto页面滚动条出现时不跳动
- Windows和Ubuntu平台Android +JAVA 环境搭建
- Android自定义view实现加载中、加载失败、无数据
- PL/SQL使用技巧
- mongo 各种索引的用法
- 1103. Integer Factorization (30) PAT 甲级
- #学志#tomcat安装问题