收發短消息又分爲三種模式:Block模式、Text模式和PDU模式。使用Block機生產廠家提供驅動支持,這種方法現在很少用了。Text Mode是純文本方式,可使用不同的字符集,從技術上說也可用於發送中文短消息,但國內手機基本上不支持,主要用於歐美地區,也不在本文討論範圍之列。PDU串表面上是一串ASCII碼,由‘0’-‘9’、 ‘A’-‘F’這些數字和字母組成。它們是8位字節的十六進制數,或者BCD碼十進制數。PDU串不僅包含可顯示的消息本身,還包含很多其它信息,如SMS服務中心號碼、目標號碼、回覆號碼、編碼方式和服務時間等。
1.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編碼時,也是字節數,等於原始短消息的字符數的兩倍。
下面介紹的內容,是在PDU Mode下發送和接收短消息的實現方法。發送和接收的PDU串,結構是不完全相同的。我們先用實際的例子說明PDU串的結構和編排方式。
(1) 發送信息的PDU串
中文:向手機13600554267發送中文“歡迎”兩字,格式如下: 0011000B913106504562f7000810046B228FCE英文:向手機13600554267發送英文“hellohello”十字符,格式如下:
0011000B913106504562f70000AA0AE8329BFD4697D9EC37
對以上的PDU串分析如下表:
分段 |
含義 |
說明 |
00 |
SMSC地址信息的長度 |
8613800250500,補‘F’湊成偶數個 |
11 |
基本參數(TP-MTI/VFP) |
發送,TP-VP用相對格式 |
00 |
消息基準值(TP-MR) |
0 |
0B |
目標地址數字個數 |
共13個十進制數(不包括91和‘F’) |
91 |
目標地址格式(TON/NPI) |
用國際格式號碼(在前面加‘+’) |
3106504562f7 |
目標地址(TP-DA) |
8613851872468,補‘F’湊成偶數個 |
00 |
協議標識(TP-PID) |
是普通GSM類型,點到點方式 |
08 |
用戶信息編碼方式(TP-DCS) |
UCS2編碼(00:7-bit編碼) |
10 |
有效期(TP-VP) |
短信的有效時間 |
04 |
用戶信息長度(TP-UDL) |
實際長度4個字節 |
6B228FCE |
用戶信息(TP-UD) |
“歡迎” |
以上內容是對中文信息的表示,需要注意的是“歡迎“兩字,在實際長度計算的時候是4,而非2。因爲UCS2編碼時計算長度爲原始短消息的字符數的兩倍。而發送的”hellohello“英文短信,與其區別在於編碼方式不同,以及長度計算有點差別,請自行分析。