Android傳送簡訊字數問題

來源:互聯網
上載者:User

以前已經知道傳送簡訊有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函數,可以把要字串按照限制來分割成可以發的訊息。

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

http://www.cnblogs.com/developer-OYK/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.