GSM短信編碼方式有三種,Block,Text和PDU模式,Block模式現(xiàn)在已經(jīng)很少采用,Text模式用來(lái)進(jìn)行ASCII碼的短信發(fā)送,因?yàn)?span xml:lang="EN-US" lang="EN-US">ASCII碼是8位字符碼,所以主要用來(lái)進(jìn)行單字節(jié)信息-拼音或字母的短消息發(fā)送,從技術(shù)上講,Text模式也可以用來(lái)進(jìn)行中文短信的發(fā)送。但是在發(fā)送和接收時(shí)需要采樣軟件編碼方式進(jìn)行額外的處理,由于現(xiàn)在的手機(jī)內(nèi)置短信都沒(méi)有增加從Text模式到中文的轉(zhuǎn)換方式,所以在手機(jī)上無(wú)法使用該方法進(jìn)行中文短信收發(fā)。PDU模式采用多種編碼方式,既可以使用ASCII格式,也可以采用Unicode方式編碼,因此,可以用來(lái)進(jìn)行以Unicode為編碼方式的中文處理。
PDU模式是一種比較復(fù)雜的編碼方式,它將編碼信息,收發(fā)地址,短消息內(nèi)容,短消息附加信息統(tǒng)一進(jìn)行了編碼,采用二進(jìn)制方式進(jìn)行收發(fā),因此,終端用戶在使用AT指令前需要將用戶輸入的字符串進(jìn)行轉(zhuǎn)換后才能使用相關(guān)AT指令進(jìn)行處理。
由于PDU模式下發(fā)送和接收短消息解碼方式略有不同,因此通過(guò)發(fā)送來(lái)進(jìn)行講解
AT+CMGF=0
AT+CMGS=<length><CR>
<PDU><Ctrl-z>
AT+CMGF=0用來(lái)設(shè)置發(fā)送短信的模式,0為PDU模式,也是默認(rèn)工作模式,系統(tǒng)重啟后便是默認(rèn)該工作模式。
AT+CMGS為GSM發(fā)送短信的AT命令,length為發(fā)送短信TPDU的長(zhǎng)度而不是短消息的長(zhǎng)度,PDU則是AT發(fā)送的信息,二進(jìn)制方式,包括目標(biāo)地址信息,發(fā)送地址信息和短信內(nèi)容。
PDU內(nèi)容分為以下幾個(gè)部分:
1.
第二個(gè)字節(jié)為地址類型信息。
接下來(lái)為地址的數(shù)值具體字節(jié)長(zhǎng)度根據(jù)用戶輸入的號(hào)碼來(lái)確定,由于采用的是字節(jié)對(duì)齊的方式,所以如果輸入的數(shù)字為奇數(shù)時(shí)需要添加一個(gè)標(biāo)識(shí)字符來(lái)填充。值得注意的是該編碼方式輸入數(shù)字的相鄰位進(jìn)行了交換,例如,13026565456,由于是奇數(shù),需要填充一個(gè)F,編碼最終結(jié)果是 3120565654F6
2.
這一部分是短信的主要信息部分,AT+CMGS=<length>中length長(zhǎng)度由該部分長(zhǎng)度決定。其中括號(hào)中標(biāo)M的表示必須具有的字段,不能省略,標(biāo)O的表示Option可選項(xiàng)。
First-Octet與地址信息部分相似,第一個(gè)字節(jié)為短信基本信息,包括短信是否發(fā)送,短信中心是否拒絕同一短信,短信中心是否回復(fù),是否包含信息頭,是否包括有效日期等信息,
發(fā)送短信時(shí),TP-MTI位必須設(shè)置為0x01,表示提交發(fā)送短信。
目標(biāo)地址長(zhǎng)度,以半字節(jié)為單位進(jìn)行計(jì)算。比如13995452345的長(zhǎng)度按這個(gè)標(biāo)準(zhǔn)計(jì)算長(zhǎng)度值為11。
TP-DCS:一個(gè)字節(jié)長(zhǎng)度,表示短消息的編碼方式。通常有以下三種
0x08表示為UCS2編碼方式,按照Unicode編碼方式,兩個(gè)字節(jié)表示一個(gè)字符編碼。
0x04表示為8bit編碼方式,按照ASCII編碼方式,一個(gè)字節(jié)表示一個(gè)字符。
0x00 表示為7bit編碼方式,按照GSM字符編碼表進(jìn)行編碼。
TP-VP:用來(lái)表示短信有效時(shí)間。由First-obtet中TP-VPF來(lái)決定,當(dāng)TP-VPF為0x10,表示相對(duì)當(dāng)前的時(shí)間,當(dāng)為0x11時(shí),表示為絕對(duì)時(shí)間,用7個(gè)byte表示年月日時(shí)分秒信息。
TP-UDL:有效的信息長(zhǎng)度,以字節(jié)為計(jì)算單位。當(dāng)該位為0時(shí),后面不帶任何用戶數(shù)據(jù)。
TP-UD:用戶的有效信息。以TP-DC規(guī)定的編碼方式進(jìn)行編碼。當(dāng)TP-VDL為0時(shí),該數(shù)據(jù)段無(wú)效。
讀PDU模式的短消息。
AT+CMGF=0;
AT+CMGR=<index>讀取存儲(chǔ)器中第index條短信。
+CMGR=<length>
<PDU>
OK
PDU的內(nèi)容包括SMSC的地址和TPDU兩部分。Length為TPDU的長(zhǎng)度。
1.
2.TPDU
First-Octet為一個(gè)字節(jié)長(zhǎng)度,包含短信基本信息
其中TP-MTI必須為0x00,表示為接收短信。其他各位標(biāo)識(shí)根據(jù)GSM03.04第9節(jié)內(nèi)容來(lái)確定。其中TP-UDHI位不為0的話,表明在TP-UD還包括相應(yīng)頭信息。
TP-OA:該信息為發(fā)送該條短信的設(shè)備地址。地址解析方式與發(fā)送短信的TPDU中的TP-DA解析方法完全一致。
TP-PID:表示短信以何種方式進(jìn)行默認(rèn)為0x00,表示采用點(diǎn)對(duì)點(diǎn)的GSM傳送協(xié)議。
TP-DCS:短信內(nèi)容編碼模式,通過(guò)讀取該位內(nèi)容,可以確定接收的短信編碼方式,從而能夠正確的讀取并顯示短信內(nèi)容。
TP-SCTS:為短信中心的時(shí)間標(biāo)記,長(zhǎng)度為7個(gè)字節(jié),分別代表年月日時(shí)分秒時(shí)區(qū)七個(gè)信息。
通過(guò)分析這七字節(jié)能夠得到短消息的接收時(shí)間。
TP-UDL:表示短消息內(nèi)容的長(zhǎng)度,以字節(jié)為計(jì)算單位。
TP-UD:讀出的短消息內(nèi)容,根據(jù)TP-DCS的編碼方式,可以解析出相應(yīng)的字符。然后提供給終端單元給用戶進(jìn)行顯示。
--------------------------------------------------------------------------------------------------
PDU 模式 用PDU 模式發(fā)送 WAP PUSH可以使用三種編碼: 7-bit 編碼、8-bit編碼和UCS2 編碼。7-bit 編碼用于發(fā)送普通的ASCII 字符,8-bit 編碼通常用于發(fā)送數(shù)據(jù)消息,UCS2編碼用于發(fā)送Unicode 字符。由于要實(shí)現(xiàn)中文WAP PUSH的發(fā)送,所以選擇用UCS2編碼,即中文Unicode 碼。 ⑴ UCS2 編碼原理 所謂UCS2編碼,是將單個(gè)的字符(1-2 個(gè)字節(jié))按ISO/IEC10646 的規(guī)定,轉(zhuǎn)變?yōu)?6 位 的Unicode寬字符。即將單個(gè)的字符轉(zhuǎn)換為由四位的‘0’-‘9’、‘A’-‘F’的數(shù)字和字 母組成的字符串。待發(fā)送的消息以UCS2 碼的形式進(jìn)行發(fā)送。 ⑵ 通過(guò)UCS2 編碼我們得到中文Unicode 碼,接著就可以進(jìn)行發(fā)送PDU 串的編制了。從表面上看,PDU串是ASCII 碼串,同樣由‘0’-‘9’、‘A’-‘F’這些數(shù)字和字母組成。它們是8 位字節(jié)的十六進(jìn)制數(shù),或者BCD碼十進(jìn)制數(shù)。PDU串除了包含所發(fā)送的消息本身外,還包含很多其它參數(shù)信息,如服務(wù)中心號(hào)碼、目標(biāo)號(hào)碼和編碼方式等。 例如 0051000BA13108086406F600 0000303010129060603AE81E 3133362e3135332e33302f77 6a73703f7075736849643d30 FB7E782B9E587BBE4BBA5E4B 為一串可以成功發(fā)送的WAP PUSH,其中包括了漢字描述和WAP頁(yè)面地址。具體分析如下 00 SMSC 地址信息的長(zhǎng)度 00表示用手機(jī)上設(shè)置短信中心號(hào)碼,PDU 串的“SMSC 址格式”段和“SMSC地址”段將省去 51 基本參數(shù)(TP-MTI/VFP) 不要求發(fā)送回復(fù) 00 消息基準(zhǔn)值(TP-MR) 0B 對(duì)方電話的長(zhǎng)度 A1 目標(biāo)地址格式 A1表示為國(guó)內(nèi)格式 3108086406F6 目標(biāo)地址,補(bǔ)‘F’湊成偶數(shù)位后奇偶位互換 00 協(xié)議標(biāo)識(shí)(TP-PID) 是普通GSM 類型,點(diǎn)到點(diǎn)方式 F5 用戶信息編碼方式 (TP-DCS) A7 有效期(TP-VP) 85 用戶信息長(zhǎng)度(TP-UDL) 0B WAP PUSH頭部的總長(zhǎng)度 05040B8423F0表示接下來(lái)是一個(gè)WAP PUSH 00 表示是Concatenated Short Messages 03 長(zhǎng)度 03 reference number 01 表示分成1個(gè)短信發(fā)送 01 當(dāng)前包的序號(hào) 29060603AE81EA8DCA WSP 02 標(biāo)記位 05 -//WAPFORUM//DTD SI 1.0//EN 6A UTF-8 00 標(biāo)記開(kāi)始 45 <si> C6 <indication 08 <action=signal-high> 0C href="http:// 03 字符串開(kāi)始 3231312e3133362e3135332e 70757368496e6465782e6a73 00 URL 字符串結(jié)束 01 > 03 內(nèi)容描述字符串開(kāi)始 E8AFB7E782B9E587BBE4BBA5 5E88EB7E58F96E5BDA9E4BFA 00 內(nèi)容描述字符串結(jié)束 01 </si> 01 </indication> 由以上分析可以看出,WAP PUSH可以被當(dāng)作一種特殊的短信來(lái)發(fā)送,WAPPUSH包發(fā)送的內(nèi)容實(shí)際上跟通過(guò)PPG網(wǎng)關(guān)發(fā)送的XML原理相同,但是經(jīng)過(guò)了壓縮。壓縮之后的格式稱為WBXML,這種格式將一些標(biāo)記用代碼來(lái)表示。然而WBXML的縮略標(biāo)記分為兩部分,一部分是所有類型的XML都通用的,另一部分是不同類型的XML有著不同的解釋。 用戶接收到此類信息時(shí),在客戶端手機(jī)支持WAP的情況下,可以直接訪問(wèn)到信息中加載的WAP網(wǎng)站地址,這樣服務(wù)器也達(dá)到了推廣業(yè)務(wù)方便用戶使用的目的。由于在UCS2編碼方式下,可發(fā)送短消息的最大字符數(shù)是140字節(jié),即WAPPUSH中的推送URL與描述文字的總字符數(shù)為140,因此描述文字的字?jǐn)?shù)限制與推送的URL長(zhǎng)度有關(guān)。 |
聯(lián)系客服