长短信发送Emoji 图标被截断的问题分析
来源:互联网 发布:php strip tags源码 编辑:程序博客网 时间:2024/05/29 05:13
问题:用安卓手机给iPhone发短信,短信内容是图标,超过一屏的时候,iPhone显示不出来。用三星手机之类的发,都有类似问题,严重的是整条短信都显示不了,好一点的是只有被截断的图标显示乱码。
截屏:
大概了解一下,应该是字符集的问题,有字符被截断了。
短信使用7-bit,8-bit和UCS-2编码。从截图看,每个图标占用了4个字节,而不是2个字节。
这是怎么回事?
从Uncode的百度百科上找到答案
D800-DB7F:高位替代(High Surrogates)
DB80-DBFF:高位专用替代(High Private Use Surrogates)
DC00-DFFF:低位替代(Low Surrogates)
2个UCS-2编码(高位+低位),经过转换后变成一个UTF-16编码,从而扩展了表达范围。
这里的高位专用替代表示转换出来的UTF-16处于专用区内。所谓专用区,就是保留给大家放自定义字符的区域
UCS-2编码,如果高位是0xD800-0xDBFF,低位是0xDC00-0xDFFF,则表示是一个UTF-16编码。很明显,这种EMOJI图标用的就是扩展编码了。
代码修改
SmsMessage.java,fragmentText函数中增加以下代码
// check if UTF-16. Higher half range is 0xD800-0xDBFF, Lower half range is 0xDC00 - 0xDFFFif( textLen > nextPos ){ int lastChar = new Integer(text.charAt(nextPos-1)); int nextChar = new Integer(text.charAt(nextPos)); if( (lastChar >= 0xD800) && (lastChar <= 0xDBFF) && (nextChar >= 0xDC00) && (nextChar <= 0xDFFF)){ nextPos -= 1; Rlog.d(LOG_TAG, "UTF-16, nextPos - 1"); }}
0 0
- 长短信发送Emoji 图标被截断的问题分析
- iOS中UITextField的字数限制 emoji被截断问题
- android 发送长短信失败的原因
- Android发送长短信
- 长短信发送
- android使用SmsManager发送长短信却接收到多条的问题(重新编辑)
- CDMA长短信问题
- CDMA长短信问题
- Flume 1.6 遇Emoji表情发生截断丢失数据问题分析
- 关于SMGP/SGIP如何发送长短信
- android发送短信的两种方式,发送长短信的两种方式,群发短信
- 长短信的处理方法
- Android短信发送流程之长短信发送(原)
- Android短信发送流程之长短信发送(原)
- 内容被截断的问题
- CMPP发送长短信,我可以实现了 CMPP2长短信实现(java版)
- 长短信
- 7位编码长短信问题
- JQuery之回到顶部的特效
- 布局之三 -- TableLayout
- java web 监听器listener详解
- 图片的操作
- 10003---Spring--配置Bean
- 长短信发送Emoji 图标被截断的问题分析
- android apk加载.so库和android apk调用C语言可执行程序
- WPF DatePicker使用记录
- 死亡笔记2--java中的集合详解
- 几行代码搞定java生成解析二维码功能
- 广工anyview数据结构-04~06(乱码不贴)
- 系统公告模块,日志模块
- Android ExpandableListView 一个小例子
- 黑马程序员——OC基础---简单的OC程序