超長短信的故事
短信協議規定:一條短信的內容最多為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個字,而且收信人閱讀也不方便。如果剛巧拆分的位置比較敏感,還會把意思給弄擰了。