Android中纠结的短信长度

来源:互联网 发布:上古卷轴5原版捏脸数据 编辑:程序博客网 时间:2024/05/22 13:14
纠结的短信长度 

      众所周知,一条短信是可以输入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()这个方法进行发送短信,开发者做发送短信的程序时要注意这一点了,不然会报错哦。
0 0
原创粉丝点击