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
- Android中纠结的短信长度
- Android中纠结的短信长度
- Android中短信的收发机制 发送短信 接收短信 拦截短信 监听短信
- Android中短信的收发
- 菜鸟在android中密码框的纠结过程
- 纠结的循环中删除
- Android中短信的接受广播和短信的解析
- Android中短信相关信息的数据库
- Android中短信相关信息的数据库
- Android中发短信的代码
- Android 中短信数据库的简单操作
- Android中短信的读取与拦截
- Android中短信的广播接收问题
- 获取Android手机中所有的短信
- 获取Android手机中所有的短信
- Android 中短信数据库的简单操作
- 获取Android手机中所有的短信
- 获取Android手机中所有的短信
- POJ 1094 变量排序 解题报告
- hello world
- java基础
- 记录将FLANN算法编译成MEX文件的过程
- TextView
- Android中纠结的短信长度
- jquery自定义插件开发总结
- Unity3d 中 PlayerPrefs 保存数据的总结
- SlidingTabLayout的使用--替代ActionBar的Tab导航
- LRUCache
- android compress 压缩 会不会失真
- JAVA实践one:仿XP自带画板实现
- [iOS NSNotifaction通知多次调用] postNotification多次调用问题
- 20160708