[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:01101101       第四个字符,就是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:00001100      第六个字符,就是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为“。”

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值