概述
收发短消息又分为三种模式:Block模式、Text模式和PDU模式。使用Block机生产厂家提供驱动支持,这种方法现在很少用了。Text Mode是纯文本方式,可使用不同的字符集,从技术上说也可用于发送中文短消息,但国内手机基本上不支持,主要用于欧美地区,也不在本文讨论范围之列。PDU串表面上是一串ASCII码,由‘0’-‘9’、 ‘A’-‘F’这些数字和字母组成。它们是8位字节的十六进制数,或者BCD码十进制数。PDU串不仅包含可显示的消息本身,还包含很多其它信息,如SMS服务中心号码、目标号码、回复号码、编码方式和服务时间等。
1.PDU编码解码
在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。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。
需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。
下面介绍的内容,是在PDU Mode下发送和接收短消息的实现方法。发送和接收的PDU串,结构是不完全相同的。我们先用实际的例子说明PDU串的结构和编排方式。
(1) 发送信息的PDU串
中文:向手机13600554267发送中文“欢迎”两字,格式如下: 0011000B913106504562f7000810046B228FCE英文:向手机13600554267发送英文“hellohello”十字符,格式如下:
0011000B913106504562f70000AA0AE8329BFD4697D9EC37
对以上的PDU串分析如下表:
分段 | 含义 | 说明 |
00 | SMSC地址信息的长度 | 8613800250500,补‘F’凑成偶数个 |
11 | 基本参数(TP-MTI/VFP) | 发送,TP-VP用相对格式 |
00 | 消息基准值(TP-MR) | 0 |
0B | 目标地址数字个数 | 共13个十进制数(不包括91和‘F’) |
91 | 目标地址格式(TON/NPI) | 用国际格式号码(在前面加‘+’) |
3106504562f7 | 目标地址(TP-DA) | 8613851872468,补‘F’凑成偶数个 |
00 | 协议标识(TP-PID) | 是普通GSM类型,点到点方式 |
08 | 用户信息编码方式(TP-DCS) | UCS2编码(00:7-bit编码) |
10 | 有效期(TP-VP) | 短信的有效时间 |
04 | 用户信息长度(TP-UDL) | 实际长度4个字节 |
6B228FCE | 用户信息(TP-UD) | “欢迎” |
以上内容是对中文信息的表示,需要注意的是“欢迎“两字,在实际长度计算的时候是4,而非2。因为UCS2编码时计算长度为原始短消息的字符数的两倍。而发送的”hellohello“英文短信,与其区别在于编码方式不同,以及长度计算有点差别,请自行分析。
(2)接受信息的PDU串
读取以上发送出来的短信,可以收到如下信息,接受到来自13600554267的“欢迎“PDU串为:0891683108503705F0040D91683106504562F7000830507001021500046B228FCE 。而接受到的“hellohello“PDU串为:
0891683108503705F0040D91683106504562F70000305070010201000AE8329BFD4697D9EC37。对以上的PDU串分析如下表:
段 | 含义 | 说明 |
08 | SMSC地址信息的长度 | 共8个八位字节(包括91) |
91 | SMSC地址格式(TON/NPI) | 用国际格式号码(在前面加‘+’) |
683108503705F0 | SMSC地址 | 8613800573500,补‘F’凑成偶数个 |
04 | 基本参数(TP-MTI/MMS/RP) | 接收,无更多消息,有回复地址 |
0D | 回复地址数字个数 | 共13个十进制数(不包括91和‘F’) |
91 | 回复地址格式(TON/NPI) | 用国际格式号码(在前面加‘+’) |
683106504562F7 | 回复地址(TP-RA) | 8613600554267,补‘F’凑成偶数个 |
00 | 协议标识(TP-PID) | 是普通GSM类型,点到点方式 |
08 | 用户信息编码方式(TP-DCS) | UCS2编码(即中文) |
30507001021500 | 时间戳(TP-SCTS) | 2003-3-12 08:36:45 +8时区 |
04 | 用户信息长度(TP-UDL) | 实际长度4个字节 |
6B228FCE | 用户信息(TP-UD) | “欢迎!” |
2.PDU的编码与解码
(1)英文编码与解码
缺省的GSM字符集为7位编码,ASCII码为8位编码,编码就是将8位ASCII编码转换为7位编码。例如:1234 编码后得到31D98C06。将“1234”用二进制表示后,转为7位编码如下:
8位编码 00110001 00110010 00110011 00110100
7位编码 00110001 11011001 10001100 00000110
通过例子可以看出,将ascii8位编码的Bit8去掉,依次将下7位编码的后几位逐次移到前面,形成新的8位编码。解码是上面的逆向过程,就是将7位字符编码转换为8为字符编码。
(2)中文编码与解码
中文编码较为简单,就是将GB2312的中文编码转换为Unicode编码即可。解码就是将Unicode编码转换为GB2312的中文编码即可。
在日常短信收发中,中文短信居多,而且,英文短信也可以作为中文短信来收发,如果,程序要求不高,所有短信均可使用中文编码。
最后
以上就是美好康乃馨为你收集整理的短信编码介绍的全部内容,希望文章能够帮你解决短信编码介绍所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复