长短信发送Emoji 图标被截断的问题分析

原创 2015年07月10日 11:07:42

问题:用安卓手机给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 - 0xDFFF
if( 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");
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

STK入门

STK(SIM Application Toolkit)入门,包括功能介绍,工作流程,命令解析等。

锁网锁卡

有些运营商出售的定制手机,只允许插这家运营商的SIM卡使用,如果插了其他运营商的卡是用不了的,这就是锁网锁卡。 本文介绍了锁网锁卡的基本概念,加锁解锁方法等通信基础知识。

IMSI与MSISDN

IMSI与MSISDN的介绍

手机通信工程师技能图谱

前几天网上流传了13张IT职业的技能图谱,只是对于分类繁多的IT职业来说,13张也只是沧海一粟。 在我力所能及的范围之内,补充一张手机通信工程师的技能图谱,欢迎补充。

几个常用术语名词解释&nbsp;MSISDN,MSRN…

MSISDN   MSISDN:Mobile Subscriber International ISDN/PSTN number(ISDN即是综合业务数字网,是Integrated Service ...

PIN, PIN2, PUK, PUK2

SIM卡由PIN码、PUK码、PIN2码和PUK2码四种密码来实现安全保护的功能。 其中PIN和PUK实现了CHV的功能,PIN2和PUK2实现了CHV2的功能。CHV和CHV2又包括以下操作:打开、...

解决Editor.md中Github emoji图标无法显示的问题

解决Editor.md中Github emoji图标无法显示的问题

Shell脚本:用于OpenVox GSM(Asterisk Card)卡发送长短信

OpenVox的GSM卡支持两种短信发送模式: text和pdu模式. 用户可以通过CLI控制台命令自行设定发送模式. 由于当前对于text模式每次只支持140个字节发送,pdu每次发送只支持70个字...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)