具体实施方式
本发明是一种短信解码的方法如图1所示,包括以下步骤:
步骤s101、获取有效字符集或无效字符集。
步骤s102、根据所述有效字符集或无效字符集,比较不同解码方式对短信进行解码得到的解码内容。
步骤s103、根据所述比较结果选择具有最佳解码结果的解码内容作为所述短信的解码结果并输出。
通过本发明的实施例,对于接收到的短信使用不同解码方式对短信进行解码,并根据有效字符集或无效字符集对各解码内容进行比较,选择具有最佳解码结果的解码内容作为解码结果。从而避免在不同网络中的用户终端互发短信时出现乱码的问题,提高了短信的容错性。
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述:
GSM协议中对SMS-Deliver类型的短信PDU(Protocol Data Unit,协议数据单元)的描述如表1所示:
表1.SMS-Deliver类型的短信PDU
Abbr. |
Reference |
P1) |
R2) |
Description |
TP-MTI |
TP-Message-Type-Indicator |
M |
2b(比特) |
Parameter describing the message type.描绘信息类型的参数 |
TP-MMS |
TP-More-Messages-to-Send |
M |
1b |
Parameter indicating whether or notthere are more messages to send标示是否有短信息被传递的参数 |
TP-RP |
TP-Reply-Path |
M |
1b |
Parameter indicating that Reply Pathexists.标示回复路径的参数 |
TP-UDHI |
TP-User-Data-Header-Indicator |
O |
1b |
Parameter indicating that the TP-UDfield contains a Header标示TP用户数据域包含一个数据头的参数 |
TP-SRI |
TP-Status-Report-Indication |
O |
1b |
Parameter indicating if the SME hasrequested a status report.标示SME是否请求状态报告的参数 |
TP-OA |
TP-Originating-Address |
M |
2-12o(八进制位) |
Address of the originating SME.SME的起始地址 |
TP-PID |
TP-Protocol-Identifier |
M |
1o |
Parameter identifying the above layerprotocol,if any.若有上层协议,对上层协议进行鉴定的参数 |
TP-DCS |
TP-Data-Coding-Scheme |
M |
1o |
Parameter identifying the codingscheme within the TP-User-Data.识别带有TP用户数据编码架构的参数 |
TP-SCTS |
TP-Service-Centre-Time-Stamp |
M |
7o |
Parameter identifying time when theSC received the message.用于确定SC接受信息时间的参数 |
TP-UDL |
TP-User-Data-Length |
M |
I(整型) |
Parameter indicating the length of theTP-User-Data field to folloW.标示TP用户数据域长度的参数 |
TP-UD |
TP-User-Data |
O |
|
用户数据 |
其中TP-UDHI(TP-User Data Header Indicator,用户数据头标识)如果为1,则表示TP-UD的前面一段数据为数据头(常常用来表示级联信息),而不是真正的短信数据。该短信被传到CDMA网络后,由于先前的CDMA短信不支持UDHI字段,UDHI字段就会丢失,因此就无法获知TP-UD中前面包含了一个数据头,直接解码时,会导致后续的解码出现字节错位或比特错误,下面是常见的几种字符编码可能遇到的情况:
(1)对于UCS2编码:
如果头部数据长度为奇数个字节,直接解码会导致后面真正的UCS2字符出现一个字节的错位,从而全部乱码。
(2)对于7bit编码:
如果头部数据长度不为7的倍数,直接解码会导致后续每个字节出现比特错位,从而全部乱码。
(3)对于8bit编码:
由于头部数据的长度计算与该编码的数据一致,因此不会导致乱码,本发明的实施例不考虑这一情况。
本发明的实施例中,对CDMA中两个常用字符集的特征分析如下:
7bit ASCII:第0-31,127为不可显示字符
UCS2(unicode):统一编码字符集,所有国家和地区的文字都在这个字符集中包括了。每种文字都占据一段特定的编码位置,例如汉字分布在U+3400~U+9FFF以及U+F900~U+FAFF之间,标准ASCII码字符分布在U+0000~U+00ff之间。
基于上述描述,本发明实施例提供一种短信解码的方法如图2所示,包括:
步骤s201、获取有效字符集或无效字符集。
具体的,根据用户终端的常用字符集特征以及语言文字类型(例如根据当前用户终端使用的界面语言),获取用户终端当前使用的有效字符集(也可称为最小字符集),或者无效字符集(也可称为不可用的字符集)。
例如,对于英语系文字ASCII编码,可将0~31,127这33个字符作为无效字符集,对于中文UCS2编码,除前面所述33个字符作为无效字符集外,还可以根据汉字编码范围U+3400~U+9FFF以及U+F900~U+FAFF,将其确定为有效字符集。
步骤s202、按照用户终端上默认的短信内容解码方式,对接收到的短信进行解码,得到解码内容。
步骤s203、根据有效字符集或无效字符集,对该解码内容进行有效性判断,有效则直接将该解码内容作为最终的解码结果输出,流程结束;否则进行步骤s204。有效性判断的标准为:解码内容中的字符全部属于有效字符,且没有无效字符时,判断解码内容有效。
步骤s204、将该解码内容作为备用解码内容保留,并使用不同解码方式对短信进行解码,得到不同的备用解码内容。
(1)如果短信内容数据首字节小于32:
①使用7bit ASCII编码方式进行解码:
将该字节作为头部数据长度,丢弃该短信内容头部数据,然后:
直接将剩余数据(以比特为单位)按照该7bit ASCII编码格式进行解码得到一个备用解码内容;或
根据短信内容头部数据长度,换算为能被7整除的比特数,将短信内容头部数据后面可能存在的补充比特也丢弃,把剩余数据(以比特为单位)按照7bit ASCII编码格式解码得到一个备用解码内容。
②使用UCS2编码方式进行解码:
将该字节作为头部数据长度,丢弃该短信内容头部数据,将剩余数据按照UCS2编码格式进行解码得到一个备用解码内容。
③使用其他编码方式进行解码:
如果存在其他可能的编码方式,则按照该编码方式对应的既定规则进行解码处理,得到一个备用解码内容;
(2)如果短信内容数据首字节不小于32:
使用UCS2编码方式进行解码:
将该字节作为头部数据长度,则丢弃短信内容头部数据,将剩余字节按照UCS2编码格式进行解码得到一个备用解码内容。
步骤s205、比较不同解码方式得到的备用解码内容,将有效程度最高的备用解码内容作为最终的解码结果。
比较时可以将有效程度作为判断规则。例如:首先根据无效字符数排序,无效字符越少,则有效程度越高;对于无效字符数相同的备用解码内容,再根据有效字符排序,如果未提供有效字符集或者排序仍相同,则可以根据解码时的顺序,将最先获得的备用解码内容作为最终的解码结果。
步骤s206、显示最终的解码结果。
该步骤中,可以对不可显示字符进行可视化处理,或者将不可显示字符替换显示为问号、或者替换显示为空格,当然也可不进行显示。
通过本发明实施例提供的方法,对于接收到的短信使用不同解码方式对短信进行解码,并根据有效字符集或无效字符集对各解码内容进行比较,选择具有最佳解码结果的解码内容作为解码结果。从而避免在不同网络中的用户终端互发短信时出现乱码的问题,提高了短信的容错性。
本发明实施例还提供一种用户终端,如图3所示,包括:
获取单元31,用于获取有效字符集或无效字符集;
解码单元32,用于使用不同解码方式对短信进行解码,得到解码内容;
比较单元33,用于根据有效字符集或无效字符集,比较解码单元32使用不同解码方式对短信进行解码得到的解码内容;
选择单元34,用于根据比较单元33的比较结果选择具有最佳解码结果的解码内容作为短信的解码结果并输出。
具体的,该解码单元32还用于:
首先按照默认的解码方式对短信进行解码;上述默认的解码方式获得的解码结果中的字符全部属于有效字符时,直接作为最终结果输出,否则作为解码内容保留并使用其他不同解码方式对短信进行解码。
具体的,该解码单元32使用的解码方式包括但不限于:
上述短信内容数据首字节小于32时,使用7bitASCII编码方式以及UCS2编码方式进行解码,分别得到解码内容;
上述短信内容数据首字节不小于32时,使用UCS2编码方式进行解码,得到解码内容。
具体的,选择单元34具体用于:
选择无效字符最少的解码内容作为上述短信的解码结果并输出;
对于无效字符数相同的多个解码内容,选择有效字符最多的解码内容作为上述短信的解码结果并输出;
对于无效字符数和有效字符数都相同的多个解码内容,根据解码顺序,将最先获得的解码内容作为最终的解码结果并输出。
另外,该用户终端还包括:
输出单元35,用于对选择单元34输出的解码结果中的无效字符进行可视化处理或不进行显示。
通过本发明实施例提供的用户终端,对于接收到的短信使用不同解码方式对短信进行解码,并根据有效字符集或无效字符集对各解码内容进行比较,选择具有最佳解码结果的解码内容作为解码结果。从而避免在不同网络中的用户终端互发短信时出现乱码的问题,提高了短信的容错性。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。