关于Android发送短信字数问题的分析及解决方法
2013-06-29 21:38
791 查看
以前已经知道发送短信有70个字符的限制,但真到用的时候才发现还是不了解。中文英文各算几个字符?一开始按照老想法,GB码中文2个字节英文一个字节来算,按70个汉字的限制可以发140个字节,但是发送的时候总是出错。后来在网上查了下短信的编码才知道,现在发送短信通常使用PDU模式,摘抄一段:
在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。
这下就明白了,发送带中文的短信时是用UCS2编码,无论中英文还是符号空格都是按一个字符算,总共70个,超过一个发送短信就会出错。而发送纯英文短信时使用7-bit编码,就可以发送160个字符了。
SmsManager有一个divideMessage函数,可以把要字符串按照限制来分割成可以发的消息。试了一下,确实可以用,不过有中文的时候分出来的短信是67个字符而不是70个,可能是和我用的联想的测试机有关。在G1这些机子上不知道是否正常。
如果发送的短信有一段中文后面还有一段url,这时用divideMessage来机械的分就不好了,要把url单独放在一条短信里, 这时还是需要自己手动来分的。
在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。
这下就明白了,发送带中文的短信时是用UCS2编码,无论中英文还是符号空格都是按一个字符算,总共70个,超过一个发送短信就会出错。而发送纯英文短信时使用7-bit编码,就可以发送160个字符了。
SmsManager有一个divideMessage函数,可以把要字符串按照限制来分割成可以发的消息。试了一下,确实可以用,不过有中文的时候分出来的短信是67个字符而不是70个,可能是和我用的联想的测试机有关。在G1这些机子上不知道是否正常。
如果发送的短信有一段中文后面还有一段url,这时用divideMessage来机械的分就不好了,要把url单独放在一条短信里, 这时还是需要自己手动来分的。
相关文章推荐
- Android发送短信解决字数限制问题
- Android发送短信字数问题
- 【案例】关于weblogic性能问题的分析和解决方法
- 【Android】关于Rendering Problems android.support.v7.internal.app.WindowsDecorActionBar问题的解决方法
- Android 触摸屏(TP)问题现象分析和解决方法汇总
- Android使用wifi通过UDP协议发送广播数据包给PC接收不到问题解决方法
- Android 触摸屏(TP)问题现象分析和解决方法汇总
- 关于Android 4.4相机预览、录像花屏的问题的解决方法
- android 关于listview item设置高度的问题解决方法
- Android 触摸屏(TP)问题现象分析和解决方法汇总
- 【android】从源码分析调用ViewPager的notifyDataSetChanged无刷新的问题及解决方法
- android开发环境遇到adt无法启动的问题分析及解决方法
- 关于英文ROM短信发送后对方显示为横线解决方法
- 关于使用SMSManager发送短信字数限制问题及短信编码格式
- android关于AlertDialog.Builder中setMessage不能换行问题的解决方法
- 完美解决Android系统短信发送每小时限制100条问题
- Android 触摸屏(TP)问题现象分析和解决方法汇总
- 关于Android发送短信获取送达报告的问题(推荐)
- 关于Android不能正确发送User-Agent的解决方法
- 关于Android原生集成5+webview,监听webview返回时,执行两次onkey方法问题的解决