[SMS]SMS內容的7bit和UCS2編碼方式簡介


簡介:SMS的編碼方式,在3GPP標准的3G TS 23.0383G TS 23.040有詳細的介紹,在本文中,只介紹SMS呈現給用戶的內容的編碼方式,即7bitUCS2的編碼方式。

 

1.       總體介紹

3G TS 23.040中,9.2.2 PDU Type repertoire at SM-TL中,有介紹六種類型的SMS,其中五種都有TP-User-Data的域,這部分的呈現也就是我們看到的SMS內容。

3G TS 23.038中,4 SMS Data Coding Scheme中,有如下信息:

<1>. SMS的三種編碼方式,7bit8bitUCS2編碼。8bit編碼工作中很少遇到,也比較簡單,這里不做說明。

<2>. TP-User-Data域的長度是140 octets。這140個字節如果保存7bit信息,最多可以保存1607bit字符,如果保存UCS2編碼,最多可以保存70個字符。

TP-User-Data包含的字符,除了SMS內容外,還有可能在開始的部分包含Header信息(TP-UDHI來指示是否攜帶)Header信息占用的部分,是作為SMS控制使用的,不能呈現給用戶。

 

2.       不帶Header信息的7bit TP-User-Data

現在我發送一條短消息給手機,內容為I love you.,如果手機接收后是存在SIM卡上的,你可以在SIM6F3C(3G TS 11.11 10.5.3 EFsms(Short messages))查看該消息內容:

01 04 81 21 43 F5 00 0B 81 51 28 39 58 71 F1 00 00 21 11 90 50 03 80 00 0B 49 10 FB 6D 2F 83 F2 EF BA 0B

因為是接收到的信息,可以用3G TS 23.040 9.2.2.1 SMS-DELIVER type來幫助解析:

01 04 81 21 43 F5 00 //前面部分,可不關注,有需要的同學自行研究

0B 81 51 28 39 58 71 F1 //TP-OA,發送SMS的手機號碼

00 //TP-PID

00 //TP-DCS, 3G TS 23.038里可以了解這里表示7bit編碼方式

21 11 90 50 03 80 00 //TP-SCTS, 時間戳

0B //TP-User-Data-Length,這里為11個字符長度,也就是”I love you.”的字符個數

49 10 FB 6D 2F 83 F2 EF BA 0B //TP-User-Data

TP-User-Data進行解析,7bit是壓縮過的,這里要把117bit數據提取出來:

0x49:0100 1001         第一個字符,高位添0,就是0100 10010x497bit編碼表為’I’

0x10:0001 0000         第二個字符,就是0010 00000x207bit編碼表為’ ’

0xFB:1111 1011         第三個字符,就是0110 11000x6C7bit編碼表為’l’

0x6D:0110 1101        第四個字符,就是0110 11110x6F7bit編碼表為’o’

0x2F:0010 1111         第五個字符,就是0111 01100x767bit編碼表為’v’

0x83:1000 0011         第六個字符,就是0110 01010x657bit編碼表為’e’

0xF2:1111 0010         第七個字符,就是0010 00000x207bit編碼表為’ ’

                                       第八個字符,就是0111 10010x797bit編碼表為’y’

0xEF:1110 1111         第九個字符,就是0110 11110x6F7bit編碼表為’o’

0xBA:1011 1010        A個字符,就是0111 01010x757bit編碼表為’u’

0x0B:0000 1011        B個字符,就是0010 11100x2E7bit編碼表為’.’

上面的7bit編碼表可以在3G TS 23.038 6.2.1 GSM 7 bit Default Alphabet查閱,看到這里大家就明白了如何把呈現給用戶的內容從7bitPDU數據里解析出來了。

 

3.       Header信息的7bit TP-User-Data

 

上圖用Now SMS發送下面消息給15829385171的手機,最終保存在SIM卡上的數據如下所示:

01 08 91 68 31 08 20 01 05 F0 44 0D 91 68 51 02 71 82 61 F4 00 D8 21 10 20 71 42 12 00 11 04 01 02 00 01 24 41 EC B7 BD 0C CA BF EB 2E

因為是接收到的信息,可以用3G TS 23.040 9.2.2.1 SMS-DELIVER type來幫助解析:

01 08 91 68 31 08 20 01 05 F0 //前面部分,可不關注

44 //bit 6表示UDHI,這里bit61,則表明TP-User-DataHeader信息

0D 91 68 51 02 71 82 61 F4 //TP-OA

00 //TP-PID

D8 //TP-DCS, 3G TS 23.038里可以了解這里表示7bit編碼方式

21 10 20 71 42 12 00 //TP-SCTS, 時間戳

11 //TP-User-Data-Length,這里為17個字符長度

04 01 02 00 01 24 41 EC B7 BD 0C CA BF EB 2E //TP-User-Data

TP-User-Data進行解析:

04 01 02 00 0104表示Header的長度為4個字節(不包含04本身),這里有5個字節,也就是說TP-User-Data17個字節,包含了5個字節的Header信息,其余的部分為可呈現給用戶的內容。

和上面不帶Header信息的7bit TP-User-Data的內容同為”I love you.”,為什么這里除去Header后的TP-User-Data剩余部分,和上面不一致呢?

不帶Header”I love you.” 7bit編碼:         49 10 FB 6D 2F 83 F2 EF BA 0B

Header”I love you.” 7bit編碼:              24 41 EC B7 BD 0C CA BF EB 2E

原因是不帶Header,則7bit是從第一個字節的第0位開始填充;而帶Header的內容要和早期不允許帶Header7bit編碼兼容,那么Header之后的部分,要留給bit位填充0值來padding保證兼容性。這里比較繞口,下面實例解釋:

例如:這里Header的總長為5bytes,呈現給用戶的數據時從第6bytes開始的,則第6bytes留出的bit位個數為:7 – (5*8%7) = 7 – 5 = 2

也就是說為兼容不帶header信息的老版本:那么前面5個字節可以容納57bit數據,並有5bit位供下一個7bit數據使用,則第6個字節需要留出2bit和前面5bit組成一個7bit數據。

下面解析這部分內容:

0x24:0010 0100         2bitpadding位,用0填充

0x41:0010 0001         第一個字符,就是0100 10010x497bit編碼表為’I’

                                       第二個字符,就是0010 00000x207bit編碼表為’ ’

0xEC:1110 1100       第三個字符,就是0110 11000x6C7bit編碼表為’l’

0xB7:1011 0111       第四個字符,就是0110 11110x6F7bit編碼表為’o’

0xBD:1011 1101      第五個字符,就是0111 01100x767bit編碼表為’v’

0x0C:0000 1100       第六個字符,就是0110 01010x657bit編碼表為’e’

0xCA:1100 1010       第七個字符,就是0010 00000x207bit編碼表為’ ’

0xBF:1011 1111       第八個字符,就是0111 10010x797bit編碼表為’y’

0xEB:1110 1011       第九個字符,就是0110 11110x6F7bit編碼表為’o’

A個字符,就是0111 01010x757bit編碼表為’u’

0x2E:0010 1110       B個字符,就是0010 11100x2E7bit編碼表為’.’

 

4.       不帶Header信息的UCS2 TP-User-Data

現在我發出一條短消息,內容為我愛你。,如果手機接收后是存在SIM卡上的,你可以在SIM6F3C(3G TS 11.11 10.5.3 EFsms(Short messages))查看該消息內容:

05 00 11 00 0B 81 51 28 39 58 72 F1 00 08 FF 08 62 11 72 31 4F 60 30 02

因為是接收到的信息,可以用3G TS 23.040 9.2.2.2 SMS-SUBMIT type來幫助解析:

05 00 11 00 //前面部分,可不關注,有需要的同學自行研究

0B 81 51 28 39 58 72 F1 //TP-OA,接收SMS的手機號碼

00 //TP-PID

08 //TP-DCS, 3G TS 23.038里可以了解這里表示UCS2編碼方式

FF //TP-VP

08 //TP-User-Data-Length,這里為8個字符長度,也就是我愛你。2

62 11 72 31 4F 60 30 02 //TP-User-Data

TP-User-Data進行解析,UCS2兩個字節表示一個UCS2字符,組合如下:

0x6211,第一個字符,UCS2為“我”

0x7231,第二個字符,UCS2為“愛”

0x4F60,第三個字符,UCS2為“你”

0x3002,第四個字符,UCS2為“。”

查詢Unicode編碼(UCS2在這里可等同為Unicode,如要了解差別,可去外網查詢相關文章了解)的方法如下: 開始à程序à附件àTrueType造字程序,進入造字階段后,選擇:窗口à參照à輸入編碼就可以看到了。

 

5.       Header信息的UCS2 TP-User-Data

 

上圖用Now SMS發送下面消息給15829385171的手機,最終保存在SIM卡上的數據如下所示:

01 08 91 68 31 08 20 01 05 F0 44 0D 91 68 51 02 71 82 61 F4 00 E8 21 10 20 71 52 22 00 0D 04 01 02 00 01 62 11 72 31 4F 60 30 02

因為是接收到的信息,可以用3G TS 23.040 9.2.2.1 SMS-DELIVER type來幫助解析:

01 08 91 68 31 08 20 01 05 F0 44

0D 91 68 51 02 71 82 61 F4

00

E8 //TP-DCS, 3G TS 23.038里可以了解這里表示UCS2編碼方式

21 10 20 71 52 22 00

0D //TP-User-Data-Length,這里為13個字符長度

04 01 02 00 01 62 11 72 31 4F 60 30 02 //TP-User-Data

TP-User-Data進行解析:

04 01 02 00 01,為Header部分

之后為可呈現給用戶的數據部分:

62 11 72 31 4F 60 30 02

0x6211,第一個字符,UCS2為“我”

0x7231,第二個字符,UCS2為“愛”

0x4F60,第三個字符,UCS2為“你”

0x3002,第四個字符,UCS2為“。”

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM