Android發送短信字數問題 – Android移動開發技術文章_手機開發 Android移動開發教學課程

  以前已經知道發送短信有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有一個pideMessage函數,可以把要字符串按照限制來分割成可以發的消息。試瞭一下,確實可以用,不過有中文的時候分出來的短信是67個字符而不是70個,可能是和我用的聯想的測試機有關。在G1這些機子上不知道是否正常。

    如果發送的短信有一段中文後面還有一段url,這時用pideMessage來機械的分就不好瞭,要把url單獨放在一條短信裡, 這時還是需要自己手動來分的。

作者 liujian885

發佈留言