短信編碼介紹

收發短消息又分爲三種模式:Block模式、Text模式和PDU模式。使用Block機生產廠家提供驅動支持,這種方法現在很少用了。Text Mode是純文本方式,可使用不同的字符集,從技術上說也可用於發送中文短消息,但國內手機基本上不支持,主要用於歐美地區,也不在本文討論範圍之列。PDU串表面上是一串ASCII碼,由‘0-9’、 ‘A-F’這些數字和字母組成。它們是8位字節的十六進制數,或者BCD碼十進制數。PDU串不僅包含可顯示的消息本身,還包含很多其它信息,如SMS服務中心號碼、目標號碼、回覆號碼、編碼方式和服務時間等。

1PDU編碼解碼

   PDU Mode中,可以採用三種編碼方式來對發送的內容進行編碼,它們是7-bit8-bitUCS2編碼。7-bit編碼用於發送普通的ASCII字符,它將一串7-bit的字符(最高位爲0)編碼成8-bit的數據,每8個字符可“壓縮”成7個;8-bit編碼通常用於發送數據消息,比如圖片和鈴聲等;而UCS2編碼用於發送Unicode字符。PDU串的用戶信息(TP-UD)段最大容量是140字節,所以在這三種編碼方式下,可以發送的短消息的最大字符數分別是16014070。這裏,將一個英文字母、一個漢字和一個數據字節都視爲一個字符。

    需要注意的是,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編碼(007-bit編碼)

10

有效期(TP-VP)

短信的有效時間

04

用戶信息長度(TP-UDL)

實際長度4個字節

6B228FCE

用戶信息(TP-UD)

歡迎

以上內容是對中文信息的表示,需要注意的是“歡迎“兩字,在實際長度計算的時候是4,而非2。因爲UCS2編碼時計算長度爲原始短消息的字符數的兩倍。而發送的”hellohello“英文短信,與其區別在於編碼方式不同,以及長度計算有點差別,請自行分析。

2)接受信息的PDU

讀取以上發送出來的短信,可以收到如下信息,接受到來自13600554267的“歡迎“PDU串爲:0891683108503705F0040D91683106504562F7000830507001021500046B228FCE 。而接受到的“hellohelloPDU串爲:

0891683108503705F0040D91683106504562F70000305070010201000AE8329BFD4697D9EC37。對以上的PDU串分析如下表:

含義

說明

08

SMSC地址信息的長度

8個八位字節(包括91)

91

SMSC地址格式(TON/NPI)

用國際格式號碼(在前面加‘+’)

683108503705F0

SMSC地址

8613800573500,補‘F’湊成偶數個

04

基本參數(TP-MTI/MMS/RP)

接收,無更多消息,有回覆地址

0D

回覆地址數字個數

13個十進制數(不包括91‘F’)

91

回覆地址格式(TON/NPI)

用國際格式號碼(在前面加‘+’)

683106504562F7

回覆地址(TP-RA)

8613600554267,補‘F’湊成偶數個

00

協議標識(TP-PID)

是普通GSM類型,點到點方式

08

用戶信息編碼方式(TP-DCS)

UCS2編碼(即中文)

30507001021500

時間戳(TP-SCTS)

2003-3-12 08:36:45 +8時區

04

用戶信息長度(TP-UDL)

實際長度4個字節

6B228FCE

用戶信息(TP-UD)

歡迎!”

2PDU的編碼與解碼

   1)英文編碼與解碼

缺省的GSM字符集爲7位編碼,ASCII碼爲8位編碼,編碼就是將8ASCII編碼轉換爲7位編碼。例如:1234 編碼後得到31D98C06。將“1234”用二進制表示後,轉爲7位編碼如下:

8位編碼 00110001 00110010 00110011 00110100

7位編碼 00110001 11011001 10001100 00000110

通過例子可以看出,將ascii8位編碼的Bit8去掉,依次將下7位編碼的後幾位逐次移到前面,形成新的8位編碼。解碼是上面的逆向過程,就是將7位字符編碼轉換爲8爲字符編碼。

   2)中文編碼與解碼

中文編碼較爲簡單,就是將GB2312的中文編碼轉換爲Unicode編碼即可。解碼就是將Unicode編碼轉換爲GB2312的中文編碼即可。

在日常短信收發中,中文短信居多,而且,英文短信也可以作爲中文短信來收發,如果,程序要求不高,所有短信均可使用中文編碼。

發佈了0 篇原創文章 · 獲贊 16 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章