您的位置:首页 > 其它

[SMS]SMS内容的7bit和UCS2编码方式简介

2012-12-22 11:38 246 查看
简介:SMS的编码方式,在3GPP标准的3G TS 23.038和3G TS
23.040有详细的介绍,在本文中,只介绍SMS呈现给用户的内容的编码方式,即7bit和UCS2的编码方式。

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的三种编码方式,7bit、8bit和UCS2编码。8bit编码工作中很少遇到,也比较简单,这里不做说明。

<2>. TP-User-Data域的长度是140 octets。这140个字节如果保存7bit信息,最多可以保存160个7bit字符,如果保存UCS2编码,最多可以保存70个字符。

TP-User-Data包含的字符,除了SMS内容外,还有可能在开始的部分包含Header信息(由TP-UDHI来指示是否携带),Header信息占用的部分,是作为SMS控制使用的,不能呈现给用户。

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

现在我发送一条短消息给手机,内容为I love you.,如果手机接收后是存在SIM卡上的,你可以在SIM的6F3C域(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是压缩过的,这里要把11个7bit数据提取出来:

0x49:0100 1001 第一个字符,高位添0,就是0100
1001,0x49,7bit编码表为’I’

0x10:0001 0000 第二个字符,就是0010
0000,0x20,7bit编码表为’


0xFB:1111 1011 第三个字符,就是0110
1100,0x6C,7bit编码表为’l’

0x6D:01101101 第四个字符,就是0110
1111,0x6F,7bit编码表为’o’

0x2F:0010 1111 第五个字符,就是0111
0110,0x76,7bit编码表为’v’

0x83:1000 0011 第六个字符,就是0110
0101,0x65,7bit编码表为’e’

0xF2:1111 0010 第七个字符,就是0010
0000,0x20,7bit编码表为’


第八个字符,就是0111 1001,0x79,7bit编码表为’y’

0xEF:1110 1111 第九个字符,就是0110
1111,0x6F,7bit编码表为’o’

0xBA:1011 1010 第A个字符,就是0111
0101,0x75,7bit编码表为’u’

0x0B:0000 1011 第B个字符,就是0010
1110,0x2E,7bit编码表为’.’

上面的7bit编码表可以在3G TS 23.038 6.2.1 GSM 7 bit Default Alphabet查阅,看到这里大家就明白了如何把呈现给用户的内容从7bit的PDU数据里解析出来了。

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,这里bit6为1,则表明TP-User-Data有Header信息

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 01,04表示Header的长度为4个字节(不包含04本身),这里有5个字节,也就是说TP-User-Data的17个字节,包含了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的内容要和早期不允许带Header的7bit编码兼容,那么Header之后的部分,要留给bit位填充0值来padding保证兼容性。这里比较绕口,下面实例解释:

例如:这里Header的总长为5bytes,呈现给用户的数据时从第6bytes开始的,则第6bytes留出的bit位个数为:7
– (5*8%7) = 7 – 5 = 2

也就是说为兼容不带header信息的老版本:那么前面5个字节可以容纳5个7bit数据,并有5个bit位供下一个7bit数据使用,则第6个字节需要留出2bit和前面5bit组成一个7bit数据。

下面解析这部分内容:

0x24:0010 0100 这2个bit为padding位,用0填充

0x41:0010 0001 第一个字符,就是0100 1001,0x49,7bit编码表为’I’

第二个字符,就是0010 0000,0x20,7bit编码表为’


0xEC:1110 1100 第三个字符,就是0110
1100,0x6C,7bit编码表为’l’

0xB7:1011 0111 第四个字符,就是0110
1111,0x6F,7bit编码表为’o’

0xBD:1011 1101 第五个字符,就是0111
0110,0x76,7bit编码表为’v’

0x0C:00001100 第六个字符,就是0110
0101,0x65,7bit编码表为’e’

0xCA:1100 1010 第七个字符,就是0010
0000,0x20,7bit编码表为’


0xBF:1011 1111 第八个字符,就是0111 1001,0x79,7bit编码表为’y’

0xEB:1110 1011 第九个字符,就是0110 1111,0x6F,7bit编码表为’o’

第A个字符,就是0111 0101,0x75,7bit编码表为’u’

0x2E:0010 1110 第B个字符,就是0010
1110,0x2E,7bit编码表为’.’

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

现在我发出一条短消息,内容为”我爱你。”,如果手机接收后是存在SIM卡上的,你可以在SIM的6F3C域(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为“。”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: