文档库 最新最全的文档下载
当前位置:文档库 › 短信编码例题加解释

短信编码例题加解释

1 短信基本原理

由ESTI制订的SMS规范中,一共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。

Block Mode已很少使用。

Text Mode是纯文本方式,可使用不同的字符集,从技术上说也可用于发送中文短消息,但国内手机基本上不支持,主要用于欧美地区。

PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。 PDU串表面上是一串ASCII 码,由‘ 0’-‘9’、‘A’-‘F’这些数字和字母组成。它们是8位字节的十六进制数,或者BCD码十进制数。PDU串不仅包含可显示的消息本身,还包含很多其它信息,如SMS服务中心号码、目标号码、回复号码、编码方式和服务时间等。在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个。我们通常在短信中所说的ASCII编码方式,实际上是指7-bit编码,而7-bit编码方式不仅能表示普通的ASCII字符,还可以表示一些特殊字符,因此7-bit编码和ASCII编码实际上是两个完全不同的概念,它们仅仅在一些普通的ASCII字符上编码相同;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。

PDU格式(GSM短信的简单解析)

1.简单介绍

SMS 是由ETSI所制定的一个规范(GSM 03.40 和 GSM 03.38)。

当使用7-bits编码的时候,它可以发送最多160个字符。

8-bit编码(最多140个字符)通常无法直接通过手机显示;通常被用来作为数据消息,例如:smart

messaging中的图片和铃声)和OTA WAP设置。

16-bit信息(最多70个字符)被用来显示Unicode(UCS2)文本信息,可以被大多数的手机所显示。一个

以class 0 开头的16-bit的文本信息将在某些手机上作为Flash SMS显示(闪烁的SMS和警告SMS)。

有两种方式来发送和接收SMS信息:使用文本模式或者使用PDU(protocol description unit) 模式。文本模式(可能某些手机不支持)实际上也是一种PDU编码的一种表现形式。在显示SMS信息,可能使用不同的字符集和不同的编码方式。最常见的选择是"PCCP437", "PCDN", "8859-1", "IRA" 和 "GSM". 这些都通过读取应用程序的at-command中的AT+CSCS指定。如果你想阅读手机上的信息,手机会为你选择一种合适的编码。那么一个可以阅读SMS消息的应用要么使用test模式,要么是PDU模式。如果使用text模式,那么应用将绑定(或限制在)一些可能的编码选择中。在某些情况下是不够的,如果使用PDU模式,那么就可以使用任何编码方式。

2

目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用T ext模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A B C D E F G H I J K L M十三项组成。

A:短信息中心地址长度,2位十六进制数(1字节)。

B:短信息中心号码类型,2位十六进制数。

C:短信息中心号码,B+C的长度将由A中的数据决定。

D:文件头字节,2位十六进制数。

E:信息类型,2位十六进制数。

F:被叫号码长度,2位十六进制数。

G:被叫号码类型,2位十六进制数,取值同B。

H:被叫号码,长度由F中的数据决定。

I:协议标识,2位十六进制数。

J:数据编码方案,2位十六进制数。

K:有效期,2位十六进制数。

L:用户数据长度,2位十六进制数。

M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。

PDU编码协议简单说明

例1 发送:SMSC号码是+86138********,对方号码是136********,消息内容是“Hello!”。从手机发出的PDU 串可以是

08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0 00 00 00 06 C8 32 9B FD 0E 01

对照规范,具体分析:

分段含义说明

08 SMSC地址信息的长度共8个八位字节(包括91)

91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 31 08 20 09 05 F0 SMSC地址8613800290500,补‘F’凑成偶数个

11基本参数(TP-MTI/VFP) 发送,TP-VP用相对格式

00消息基准值(TP-MR) 0

0D目标地址数字个数共13个十进制数(不包括91和‘F’)

91目标地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 51 99 31 58 10 F5目标地址(TP-DA) 8615991385015,补‘F’凑成偶数个

00协议标识(TP-PID) 是普通GSM类型,点到点方式

00用户信息编码方式(TP-DCS) 7-bit编码

00有效期(TP-VP) 5分钟

06用户信息长度(TP-UDL) 实际长度6个字节

C8 32 9B FD 0E 01用户信息(TP-UD) “Hello!”

例2 接收:SMSC号码是+86138********,对方号码是136********,消息内容是“你好!”。手机接收到的PDU串可以是

08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 96 03 29 30 F0 00 08 30 30 21 80 63 54 80 06 4F 60 59 7D 00 21

对照规范,具体分析:

分段含义说明

08地址信息的长度个八位字节(包括91)

91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 31 08 20 09 05 F0 SMSC地址8613800290500,补‘F’凑成偶数个

84基本参数(TP-MTI/MMS/RP) 接收,无更多消息,有回复地址

0D回复地址数字个数共13个十进制数(不包括91和‘F’)

91回复地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 51 99 31 58 10 F5回复地址(TP-RA) 8615991385015,补‘F’凑成偶数个

00协议标识(TP-PID) 是普通GSM类型,点到点方式

08用户信息编码方式(TP-DCS) UCS2编码

01 01 01 80 63 54 80时间戳(TP-SCTS) 2010-10-10 08:36:45 +8时区

06用户信息长度(TP-UDL) 实际长度6个字节

4F 60 59 7D 00 21用户信息(TP-UD) “你好!”

若基本参数的最高位(TP-RP)为0,则没有回复地址的三个段。从Internet上发出的短消息常常是这种情形。

注意号码和时间的表示方法,不是按正常顺序顺着来的,而且要以‘F’将奇数补成偶数。

在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。

5.7Bit编码

"hellohello"包含了10个字符,他们必须一个个将用7-bits来代表。

h e l l o h e l l o

104 101 108 108 111 104 101 108 108 111

1101000 1100101 1101100 1101100 1101111 1101000 1100101 1101100 1101100 1101111 (对应ascii码,不包含最高位0)

1101000

110010 1

11011 00

1101 100

110 1111

11 01000

1 100101

1101100

1101100

110111 1

首先将字符转换为7位的二进制,然后,将后面字符的位调用到前面,补齐前面的差别。例如:h翻译成1101000,e翻译成1100101,显然h的二进制编码不足八位,那么就将e的最后一位补足到h的前面。那么就成了11101000(E8)。剩余地编码看下表:

1 1101000

00 110010

100 11011

1111 1101

01000 110

100101 11

1101100 1

1 1101100

110111

E8 32 9B FD 46 97 D9 EC 37

那么就变成了9个八进制数 E8 32 9B FD 46 97 D9 EC 37。

相关文档
相关文档 最新文档