来源: 作者:CTO 浏览次数:2491 上传时间:2011-6-16
目前公司的客户端支持超长短信后,有细心的客户发现,超长短信虽然可以保持一条短信上百字在接收手机里不分段,但是扣费的时候普遍字数比原来一般短信的字数有所减少,今天我们就来答疑一下为什么会有这种问题?
短信协议规定:一条短信的内容最多为140个字节,相当于140个英文字母(当然也包括数字和符号)或70个汉字。但可以使用压缩的方法,一次发送160个字符,但仅适用于发送纯英文的情况。这是因为一个字节是8位,而一个字符实际只用7位。如果1个字节放一个字符,那每个字节就会浪费1位。压缩就是把这浪费的1位也用上:把第2个字符的1个位拼到第1个字节,再把第3个字符的2个位,拼到第2个字节,以此类推,160个字符就被压缩到140个字节中了,实现一次发送160个字符。但对汉字而言,依照UNICODE编码,每个汉字占2字节,所以一次最多只能发送70个。对于超过70个汉字的短信,就是我们这里要说的“超长短信”。
这里所说的“一次发送”,也就是按照一条短信收费的意思。有的朋友可能觉得,我的手机一次可以发送几百个汉字呢!这实际上是你的手机在发送时,做了处理,自动按70个字一条的原则,拆分成多条发送了!你可能没觉察到,但电信部门却已经按多条扣掉你的短信费了!所谓70个汉字这种说法也是不够准确的。实际上,包含至少1个汉字的短信,其中每一个字符,都按一个汉字计数。例如:“新的1年开始,祝好事接2连3,心情4季如春,生活5颜6色,7彩缤纷,偶尔8点小财,烦恼抛到9霄云外!请接受我10心10意的祝福。”这条短信,其中的数字、逗号、感叹号也都按汉字计算。
老型号的手机,有的会自动限制输入的字数,超过70个,就输不进去了;如果没有限制,就会发送失败。现在市面上销售的手机,几乎都有自动分拆的功能,而且也有将收到的由超长短信拆分的多条自动拼接成一条的功能。使得有些朋友误以为发了几百个字,才花了1毛钱。电信能那么傻么?
对于自己开发短信收发软件的朋友,在处理超长短信时,必须考虑拆分和拼接的问题。短信中心不会替你拆分,超过70个汉字,就无法发送成功。北京移动为了照顾那些老型手机,以10086发送的超过70个字的短信,每条的头上,都带有(1/x)、(2/x)之类的表示共几条,第几条的提示。这当然也是一种拆分方法,接收端也不必考虑拼接问题,但这无形中每条就占用了5个字,而且收信人阅读也不方便。如果刚巧拆分的位置比较敏感,还会把意思给弄拧了。
|