Android中纠结的短信长度

纠结的短信长度 
  众所周知,一条短信是可以输入70个中文字符的。一个字符是2个字节(Byte)。一个字节是8位(bit).所以通用的计量是 一条短信可以输入70*2*8=1120 bit
  一个ASCII码是7bit(128个字符的标准ASCII码),如果你输入的是标准ASCII码的话你,就可以在一条短信中输入1120/7=160个ASCII字符。
  比如说 你在第一条短信中输入数字 那么你这一条短信应该是可以输入160个数字的。但是只要你输入一个中文,系统立刻会使用中文的双字节计算标准来重新计算整个短信。比如当你输入123时 系统会提示你 你还可以输入160-3=157个字符。但是你再输入一个“一”时,系统会认为你已经输入了4个中文,提示你还可以输入70-4=66个中文。

  好了 一条短信可输入字符的长度应该大家都明白了。那么超长短信的字符计算呢?两条短信是不是能够输入160*2=320个字符呢?或者140个中文呢?
不是的。超长短信的计算因为有协议存在的缘故,会有变化。
当第一条短信输入到161个字符时,你会发现系统帮你创建的第二个短信实际上只允许你输入145个字符,第三条短信以及以后的短信会允许你输入153个字符。
如何计算得到?
超长短信需要有协议,所以每一条短信中会贡献7个字符用于协议相关。
当第一条短信达到161个字符时,由于要使用协议,第一条短信必须留出7个字符的长度。因此有7个被挤出来的字符连同第161个字符,一共8个字符就被放到了第二条短信。
第二条短信一共可写160个字符,现在已经被安放了8个字符,还要加上自己协议的7个字符,所以一共有15个字符不可用,160-15=145个字符。因此第二条短信只能写145个字符。
第三条以及以后的短信 就很单纯的只需要留出自己的7个协议字符,因此都是160-7=153个字符。

你可以用一个有趣的例子来验证一下以上的理论。
你可以输入160+145=305个数字。这会刚好占满所有两条短信的空间。这时你删除几个字符,打入一个中文
短信会立马变成5条 这是因为短信变成了305个中文,(305*16)/1120=4.3 所以是5条短信。


上面是我从别人中转载过来的,下面的总结是我本人在开发中验证过的。
小巫总结:
一条短信可容纳70个中文,但协议头会占其中的7个字符,所以用户能输入的字符就只有133个,如果超过这个字符数话会被拆分为多条短信。在程序中就要把用户输入的短信内容进行拆分了,然后调用sendMultipartTextMessage()这个方法进行发送短信开发者做发送短信的程序时要注意这一点了,不然会报错哦。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值