昨日IOS组的同事遇到一个棘手的问题:当输入框内含有emoji表情时,如何获取文本框内的字符数(一个emoji表情算一个字符)。
先从我最近接触的JAVA说起,JAVA中,在使用String的length方法时,如果是普通的中英文字符,没有问题,但是如果该字符的Unicode编码大于0xFFFF,这个length方法就不能正确的获取字符数量了,事实上会把这样的特殊字符计算成2个字符。当然,JAVA已有现成的方法解决这个问题:codePointCount。
可惜的是,找了很久,在Objective-c中没有找到类似的方案。(似乎SubString后,数组长度就是准确的字符数,有待验证 )
我不是IOS程序员,暂时不能提供OC中的解决方案。但在昨日的摸索中,也有一点点收获,拿出来分享一下。
1. emoji表情大部分的unicode编码大于0xFFFF,也就是UTF16编码后占用4个字节,仅小部分表情Unicode小于0xFFFF,这部分UTF16编码后占用2个字节。
2. 不管是Android还是IOS,从文本框中读取到的字符串,在内存中都是UTF-16编码(大端)形式存放的。(默认情况下)
3. 顺便摘录utf-16编码的规则(看明白这个规则,IOS中自行解决code point count的问题也就迎刃而解了):
   1) If U < 0x10000, encode U as a 16-bit unsigned integer andterminate.2) Let U' = U - 0x10000. Because U is less than or equal to 0x10FFFF,U' must be less than or equal to 0xFFFFF. That is, U' can berepresented in 20 bits.3) Initialize two 16-bit unsigned integers, W1 and W2, to 0xD800 and0xDC00, respectively. These integers each have 10 bits free toencode the character value, for a total of 20 bits.4) Assign the 10 high-order bits of the 20-bit U' to the 10 low-orderbits of W1 and the 10 low-order bits of U' to the 10 low-orderbits of W2. Terminate.Graphically, steps 2 through 4 look like:U' = yyyyyyyyyyxxxxxxxxxxW1 = 110110yyyyyyyyyyW2 = 110111xxxxxxxxxx

转载于:https://www.cnblogs.com/shenzhigang/p/5015113.html

有关emoji表情以及utf-16编码相关推荐

  1. 4字节emoji表情对应的Unicode编码获取和编码转换

    GitHub Flavored Markdown 今天研究了一天Markdown移动端和pc端统一实现方式,由于以前有搞过移动端富文本编辑器,搞Markdown简单多了: 其中GFM的表情语法不错,比 ...

  2. emoji unicode java_4字节emoji表情对应的Unicode编码获取和编码转换

    GitHub Flavored Markdown 今天研究了一天Markdown移动端和pc端统一实现方式,由于以前有搞过移动端富文本编辑器,搞Markdown简单多了: 其中GFM的表情语法不错,比 ...

  3. java emoji转unicode编码_4字节emoji表情对应的Unicode编码获取和编码转换

    GitHub Flavored Markdown 今天研究了一天Markdown移动端和pc端统一实现方式,由于以前有搞过移动端富文本编辑器,搞Markdown简单多了: 其中GFM的表情语法不错,比 ...

  4. android 调出键盘表情_Android 显示输入法中的emoji表情以及String字符

    实现用原生键盘输入表情并显示,有两种办法: 发送时将String字符串转换为Unicode编码字符串,显示接收的列表时用Unicode编码字符串转化为String字符串 发送时将String字符串转换 ...

  5. android 表情字符串,Android 显示输入法中的emoji表情以及String字符串转码

    实现用原生键盘输入表情并显示,有两种办法: 发送时将String字符串转换为Unicode编码字符串,显示接收的列表时用Unicode编码字符串转化为String字符串 发送时将String字符串转换 ...

  6. js解析emoji表情

    Emoji 公司的产品之前只有网页端,并没有提供emoji表情,之后将某个模块整合到app中,里面有个评论功能,在手机端可以输入emoji,显示的时候是空白,说明数据库并没有存储成功,查阅资料后得知e ...

  7. Android 显示输入法中的emoji表情以及String字符串转码

    Android 显示输入法中的emoji表情以及String字符串转码 实现用原生键盘输入表情并显示,有两种办法: 发送时将String字符串转换为Unicode编码字符串,显示接收的列表时用Unic ...

  8. Emoji表情图标在iOS与PHP之间通信及MySQL存储

    在某个 iOS 项目中,需要一个服务器来保存一些用户数据,例如用户信息.评论等,我们的服务器端使用了 PHP+MySQL 的搭配.在测试过程中我们发现,用户在 iOS 端里输入了 Emoji 表情提交 ...

  9. Java | MySQL Emoji表情写入数据库时报错问题解决,Incorrect string value: ‘\xF0\x9F\x98\x84\xF0\x9F...‘ for column

    现象: 将Emoji表情存入数据库时,报如下错误: Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x99\x83\xF ...

最新文章

  1. Mycat原理、应用场景
  2. 如何用windbg查看_eprocess结构
  3. 设计模式四:策略模式
  4. JAVA 框架-Spring
  5. Java面试题中高级,javaif循环语句
  6. 【Python】ffmpeg模块处理视频、音频信息
  7. 计算机中年级排名怎么操作,智学网如何查看年级排名 智学网看年级排名方法【详解】...
  8. phoenixframework自动化测试平台1.4.6版本发布
  9. BZOJ_2243 [SDOI2011]染色 【树链剖分+线段树】
  10. Pandas库的基本使用方法
  11. Nginx优化---防盗链--网页缓存--网页压缩--日志分割
  12. SAS 金融函数 PMT IRR
  13. C语言 | 杭州电子科技大学ACM | 求和问题
  14. KP26--输入成本中心的标准作业量(活动类型价格)
  15. What Is 'FTW'? What Does It Mean?
  16. python批量读取图片gps位置_某少儿不宜网站图片拍摄位置分析,Python批量读取图片GPS位置!...
  17. 计算机综合布线实验报告,综合布线设计实验报告.doc
  18. 【猿说VUE】Vue列表渲染
  19. 读计算机成都哪所学校好,成都哪所计算机学校好
  20. 如何做好软文推广?如何写软文才可以精准引流?

热门文章

  1. Kendo Web UI Grid里时间格式转换
  2. 多少秒算长镜头_你了解植保无人机一天到底能够干多少活吗??
  3. apache 启用 gzip压缩
  4. (6)SMC接口采集数据出现错误(学无止境)
  5. mysql结果集键值对_键值对集合DictionaryK,V根据索引提取数据
  6. 今日头条电脑版官方版_雷霆拯救电脑版-雷霆拯救pc版下载v4.0.9 官方版
  7. 蓝桥杯单片机:11届决赛
  8. 【C语言】强迫症是不是病QAQ
  9. 创建struct fib_info
  10. ROS :为IDE配置环境变量