短信处理方法以及装置的制作方法

文档序号:6559511阅读:141来源:国知局
专利名称:短信处理方法以及装置的制作方法
技术领域
本发明涉及一种通信方法及装置,特别是涉及一种短信处理方法以及装置。
背景技术
全球信息化为移动通信中的短信(SM,Short Message)通信提供极大的发展前景。据中国信息产业部2006年5月21日的最新统计显示,2006年1至4月,手机短信量达到1322.5亿条,比上年同期增长46.5%。
短信通信数量的飞速增长以及其庞大的增长基数,一方面说明短信通信的技术优势明显,另一方面也表明短信市场很大。由于短信通信已经成为移动用户常用的通信方式,用户为此需要负担一定的费用。随着短信使用量的激增,该类费用增长迅速。其中,长短信成为加重用户费用负担的原因之一。所述长短信是指其容量超出一条短信的最大信息容量、必须采用至少两条短信发送的短信。相对于长短信来说,一次可发送全部内容的短信称为非长短信。
现有技术短信一般采用PDU(Protocol Data Unit,协议数据单元)模式的7位、8位或UCS2编码方式进行编码。这里,在一条短信内仅能采用一种编码方式。其中,7位编码用于发送普通的ASCII字符,它将一串7位的字符(最高位为0)编码成8位的数据,每8个字符可“压缩”成7个;8位编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。
按照现有短信协议,PDU串的用户信息(TP-UD,TP-User-Data)段最大容量是140字节,所以在这三种编码方式下,可以发送的一条非长短信的最大字符数分别是160、140和70。不管用户发送什么样的内容、字符类型为何的短消息,如果超过最大字符数量,长短信内容将会被分割成多条去发送。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。
在这三种编码中,UCS2编码方式所包含的字符范围最大,可以将所有的字符编码;7位编码方式所包含的字符范围只有不到140个字符,7位字符集包括标准7位字符集和扩展7位字符集。扩展7位字符需要在其前面加一个转义字符才能够参与编码。转义字符是标准7位字符,只在有扩展7位字符时才会使用;8位编码方式的范围只有256个字符。
在PDU模式中,按照现有短信协议,一条长短信被分割以后,单条子短信所能够发送的最大字符数量分别是1)在7位编码方式下153个字符;2)在8位编码方式下134个字符;3)UCS2编码方式下67个字符。
与前面提到的非长短信三种编码下最大字符数量160、140和70相比,长短信被分割后的子短信在每种编码方式下的最大字符数量都少了几个,这是因为这几个字符要被用于存放长短信的一些标识信息。
在7位、8位和UCS2编码这三种编码下,每一个字符在存储器中所占用的空间分别为1)7位的编码方式下每七位构成一个字符;2)8位编码方式下每八位构成一个字符;3)UCS2编码方式下每十六位构成一个字符。
其中,扩展7位字符编码时有点特殊,一个扩展7位字符在7位编码方式下需要在扩展字符前面加上一个转义字符,共2个7位字符参与编码,在存储器中所占长度需要14位;在8位编码方式下,如果该扩展7位字符在8位编码范围内,编码时只需要该字符参与编码,在存储器中所占长度为8位;如果该字符不在8位编码范围内,则该字符只能用UCS2编码,需要占用的存储长度为16位。因此,在本文中现有技术短信的编码优先级别从低到高分别是7位、8位和UCS2编码。最高等级编码是UCS2编码,除了在上述字符不在8位编码范围内的情况,8位编码等级高于7位编码等级。
所以在这三种编码下,一条长短信所包含的字符数在存储器中所占长度为分别为1)7位编码方式下153×7=1071位;
2)8位编码方式下134×8=1072位;3)UCS2编码方式下67×16=1072位。
因此,长短信在存储器的最大长度为1072位。而在这三种编码方式下,一条非长短信在存储器中所占长度最大值都是1120(160×7、或140×8、或70×16)位。如果一条短信所包含信息内容的位数大于1120位,则可以判断该短信为长短信。
根据现有短信协议,一条非长短信中仅采用一种编码方式,当一条非长短信中包含超过一种编码所能处理的字符时,比如7位编码和UCS2编码共存在一条短信中时,采用包含字符范围最大的编码方式-UCS2进行编码,以使得对所有短信内容编码。此时,16位长度的UCS2编码所造成的存储浪费不能避免。也即对本来可以用7/8位编码的字符统一为16位Unicode编码字符,在最极端情况下会增加一倍的存储容量,增加了短信分割条数。加重用户费用负担的同时还加重通信网络的负担。
例如短信的内容有160个字符,前150个为7位字符,后10个为Unicode字符,如果简单地统一采用UCS2编码方式,每个字符分配16位存储容量,则存储容量是160×16=2560。对于长短信来说,每个子短信的最大容量是1072,所以这160个字符必须分成3条子短信(67+67+26)发送。
显然,在这样的多种字符混杂的情况下,长短信简单地统一采用UCS2编码方式可能大大地降低单条短信(分割后)空间利用率。

发明内容
本发明要解决的技术问题是提供一种减少长短信分割条数的短信处理方法。
本发明要解决的技术问题是还提供一种减少长短信分割条数的短信处理装置。
为解决上述第一技术问题,本发明的目的是通过以下技术方案实现的提供一种短信处理方法,在短信发送前,包括步骤分析短信内字符的类型;在一次短信可以发送的最大长度内,选择能够将该长度内所有类型字符进行编码的一种等级较最高等级编码方式低的编码方式;采用所述选择的编码方式对该长度内字符进行编码,以组建一条短信。
所述分析短信内字符的类型包括步骤从需发送的短信中逐个读取字符;判断当前字符所属类型和编码方式;所述判断编码方式的步骤包括比较所述当前字符编码方式与刚好能对已读全部字符编码的编码方式,在当前字符编码方式等级较高情况下,保存当前字符编码方式;返回读取字符的步骤,直至已读取字符的存储长度达到所述最大长度;选择一种等级大于或等于保存的编码方式、并且低于最高等级编码的编码方式。
定所述最大长度的步骤为判断短信类型,是长短信则所述最大长度为小于或等于1072位,否则所述最大长度为1120位。
在读取一个字符后记录本次所读取的字符偏移量;所述判断短信类型的步骤包括依据保存的编码方式统计当前需要参与编码的字符数量;依据保存的编码方式与当前所统计的参与编码的字符总数,计算所述字符总共需要占用的存储长度;判断占用的存储长度是否小于或等于1120位,是并且已经读完全部字符则判断短信类型为非长短信,否则判断短信类型为长短信。
所述判断占用的存储长度小于或等于1072位、并且还剩未读取字符时进一步包括单独保存所读取的字符偏移量与编码方式的步骤,所述编码方式用于在确定短信类型为非长短信时对字符进行编码。
在所述占据的存储长度大于1072位、并且判断短信类型为长短信时进一步包括,返回记录本次所读取的字符偏移量与编码方式的步骤,所述字符偏移量作为长短信截取点,所述编码方式用于对字符进行编码。
在分析短信内字符的类型之前进一步包括,初始化短信类型为非长短信的步骤;在判断短信类型为长短信时继续进行读取字符;在再次读取到长短信一次发送的最大长度时截取该长度内的字符。
在判断该字符所属类型为只能用UCS2编码的类型时,判断整个短信的长度,如果整个短信长度大于70个字符,则判断该短信的短信类型是长短信,此时判断字符偏移量是否大于67个字符,是则将此字符前面的67个字符截取并编码。
所述编码方式是能够将该长度内所有类型字符进行编码的最低等级编码方式。
为解决上述第二技术问题,本发明的目的是通过以下技术方案实现的提供一种短信处理装置,包括字符类型分析模块、编码方式判断模块以及编码模块,所述字符类型分析模块用于在短信发送前分析短信内字符的类型,所述编码方式判断模块用于在一次短信可以发送的最大长度内,选择能够将该长度内所有类型字符进行编码的一种等级较最高等级编码方式低的编码方式,所述编码模块用于采用所述选择的编码方式对该长度内字符进行编码,以组建一条短信。
所述字符类型分析模块包括字符读取模块和字符类型与编码判断模块,所述编码方式判断模块包括编码方式比较模块和编码方式保存模块,所述字符读取模块用于从需发送的短信中逐个读取字符,所述字符类型与编码判断模块用于判断该字符所属类型和当前编码方式,所述编码方式比较模块用于比较所述当前字符编码方式与刚好能对已读全部字符编码的编码方式,在当前字符编码方式等级较高情况下,保存当前字符编码方式,并由字符读取模块继续读取字符,直至已读取字符的存储长度达到所述最大长度。
进一步包括短信类型判断模块,其包括字符数量统计模块、存储长度计算模块以及存储长度判断模块,所述字符数量统计模块用于依据保存的编码方式统计当前需要参与编码的字符数量,所述存储长度计算模块用于依据所述保存的编码方式与当前所统计的参与编码的字符总数,计算该等字符总共需要占用的存储长度,所述存储长度判断模块用于判断占用的存储长度是否小于或等于1120位,是并且已经读完全部字符则判断短信类型为非长短信,否则判断短信类型为长短信。
所述短信类型判断模块进一步包括字符偏移量与编码方式单独保存模块304,其用于在判断占用的存储长度小于或等于1072位、并且还剩未读取字符时单独保存所读取的字符偏移量与编码方式,所述编码方式用于在确定短信类型为非长短信时对字符进行编码。
进一步包括长短信截取模块,在所述占据的存储长度大于1072位、并且判断短信类型为长短信时,所述长短信截取模块用于根据记录的本次所读取的字符偏移量与编码方式、分别设定所述长短信截取点对字符进行编码。
在字符类型分析模块判断该字符所属类型为UCS2编码时,由字符偏移量记录模块记录整个短信的长度,在整个短信长度大于70字符情况下,所述短信类型判断模块判断得到该短信的短信类型是长短信,并在字符偏移量记录模块记录的字符偏移量大于67字符情况下,由长短信截取模块将此字符前面的67个字符截取,并由编码模块进行编码。
以上第一技术方案可以看出,由于本发明在多种类型字符混合的长短信需要发送前,对每条分割的短信采用较优编码方式进行编码,避免统一用一种编码方式对整条短信编码。也就是动态地分析每一个字符所属的字符类型来决定一条能够独立发送的短信所应该选取的较优编码方式、动态统计在较优编码方式下参与编码的字符数量最大值,取可以实现独立发送短信的字符数量最多的一种编码方式来组成一条可独立发送的短信,使一条独立发送的短信能够发送最大数量的信息内容。对所述长短信重复使用上述方法,则对整个短信内容而言可能就会采用多种编码方式与分割方式,避免简单地对整条短信使用单一的编码方式而导致长短信分割后发送次数多、发送的短信空间利用率低、用户费用增加的情况,从而减少长短信的分割条数、提高空间利用率、减轻用户费用负担以及降低系统负担。
以上第二技术方案可以看出,由于本发明在多种类型字符混合的长短信需要发送前,采用编码方式判断模块和短信类型判断模块判断出能对单条分割的子短信字符全部编码的较优编码方式,避免统一用一种编码方式对整条短信编码。也就是采用字符类型分析模块动态地分析每一个字符所属的字符类型,并配合编码方式判断模块来决定一条能够独立发送的短信所应该选取的较优编码方式、动态统计在较优编码方式下参与编码的字符数量最大值,取可以实现独立发送短信的字符数量最多的一种编码方式来组成一条可独立发送的短信,使一条独立发送的短信能够发送最大数量的信息内容。避免简单地对整条短信使用单一的编码方式而导致长短信分割后发送次数多、发送的短信空间利用率低、用户费用增加的情况,从而减少长短信的分割条数、提高空间利用率、降低用户费用负担以及降低系统负担。


图1是本发明短信处理方法第一实施方式的流程图;图2是判断字符类型与编码方式的流程图;图3是统计参与编码的字符数量的流程图;图4是本发明短信处理方法第二实施方式的流程图;图5是本发明短信处理装置的原理框图。
具体实施例方式
本发明基本原理是在多种类型字符混合的长短信需要发送前,为避免简单的对整条短信使用单一的编码方式而致使发送的短信空间利用率低、用户费用增加的情况。本发明提出一种在遵守现有协议的基础上,对长短信内容进行短信分割,动态地分析每一个字符所属的字符类型来决定一条能够独立发送的短信所应该选取的较优编码方式、动态统计在较优编码方式下参与编码的字符数量最大值,取可以实现独立发送短信的字符数量最多的一种编码方式来组成一条可独立发送的短信,使一条独立发送的短信能够发送最大数量的信息内容。对所述长短信重复使用上述方法,则对整个短信内容而言可能就会采用多种编码方式与分割方式,从而减少长短信的分割条数、提高空间利用率、减少信息费用。
基于以上原理,本发明提供多个实施方式以实现发明目的,分别举未知短信类型、已知长短信和长短信下快速处理短信内容的实施方式以充分说明本发明。以下结合实施方式和附图,对本发明进行详细描述。
参阅图1,以下是对编辑完成的短信进行分割的流程,以便在分割完成之后进行发送。本发明第一实施方式是在未知该已编辑完成的短信是否为长短信类型情况进行短信分割的处理A、初始化需发送短信的编码方式为最低等级,也就是7位编码方式,初始化短信类型为非长短信,扩展7位字符为0。
初始化的作用在于无论短信内容为何,预先设定其编码方式为最低等级并且短信类型为非长短信,如果分割结果是全部短信内容属于最低等级编码,即不需要采用较高级编码方式,从而节省存储空间,减少分割条数。如果最后判断的结果是长短信,那么可能进行多次分割,每次分割的流程步骤A都需要初始化需发送短信的编码方式为最低等级,但短信类型标识仅初始化一次,即如果多次分割,第一次分割的流程需要初始化,其他分割流程不需要初始化。
以下步骤B、C和D是分析短信内字符类型的处理流程。
B、从需发送的短信内容中读取一个字符,判断是否字符结束标识,是则更改结束标识,直接转到步骤M,否则继续以下步骤。
从第一个字符开始分析,如果第一个字符就已经是短信结尾,说明是空短信,在后续循环分析中,如果该字符表明已经是短信结尾,则没有必要再分析,结束循环。
C、记录本次所读取的字符偏移量。
所述的字符偏移量是指相对于本次分割短信过程的第一次读取字符的位置来说的,比如第一次读取字符,那么这个字符偏移量是1,第n次读取字符,那么这个字符偏移量是n。读取的间隔是16位,因为在此之前,所有属于7位、扩展7位、8位或者UCS2编码类型的字符都转换成了Unicode字符。在后续的分割短信流程中,所述字符偏移量作为短信分割点的依据。每分割一次后,字符偏移量都会清零。
D、判断该字符所属类型和编码方式。
即判断该字符所属的编码类型,分析其属于标准7位、扩展7位、8位或者UCS2编码字符的哪一种,进而确定7位、8位或者UCS2编码方式。
以下步骤E~K处理的目的是在一次短信可以发送的最大长度内而且不含只能采用最高等级编码进行编码的字符类型情况下,选择能够将该长度内所有类型字符进行编码的一种等级较最高等级编码方式低的编码方式;如果有UCS2编码字符,则按照UCS2编码方式对含该UCS2编码字符的独立短信进行编码。
E、与此前保存的较高等级编码方式比较,如果此字符的编码方式等级更高,则将当前编码方式替换所保存的编码方式。
此步骤的目的在于因为每个单独发送的短信只能采用一种编码方式,而且是采用能对全部字符进行编码的编码方式来进行编码,因此这里在分析短信字符的同时,将分析到的属于较高等级的字符的编码方式记录下来,这样就能得到短信里面字符所属最高等级的编码方式,因而利于短信内容占用存储量长度计算。
本步骤具体过程请参阅图2,具体是E1、判断所述保存的较高等级编码方式是否等于UCS2,如果是则进入步骤E2,否则进入步骤E3;E2、直接返回UCS2编码方式;因为UCS2编码为最高级别编码,可以对任意字符编码,并且必须采用UCS2编码方式进行编码,所以没有必要再分析读取的字符类型与编码方式,直接返回UCS2编码类型,分析结束。
E3、判断较高等级编码方式是否为8位编码方式,是则进入步骤E4,否则进入步骤E6;8位编码优先级是高于7位编码的编码方式,此处对保存的较高等级编码方式是否为8位编码进行判断,是进行后续与本字符的编码方式进行比较的前提。
E4、判断本字符的国际字符码值是否小于等于255,是则进入步骤E5,否则进入步骤E2;在保存的较高等级编码方式是否为8位编码方式和本字符的国际字符码值是否小于等于255情况下,说明本字符的编码方式等级不可能高于8位编码方式等级,因此进入步骤E5,返回8位编码方式,不需要替换已保存的较高等级编码方式;如果大于255,则说明本字符不能用8位编码方式进行编码,只能用UCS2编码方式进行编码,因此进入步骤E2。
E5、返回8位编码方式,分析结束;E6、判断本字符是否为标准7位编码字符,是则进入步骤E7,否则进入步骤E8;
在较高等级编码不属于UCS2和8位编码情况下,本字符可能是8位、标准7位或扩展7位编码字符,因此在标准7位编码字符集中查找本字符,如果找到了本字符,进入步骤E7。
E7、返回7位编码方式,分析结束;本步骤说明保存的较高等级编码和本字符编码方式一致,因此返回7位编码方式,不需要替换保存的较高等级编码。
E8、判断本字符是否为扩展7位编码字符,是则进入步骤E9,否则进入步骤E10;在本字符可能是扩展7位编码情况下,在扩展7位编码字符集中查找本字符,如果找到了本字符,进入步骤E9。
E9、记录该扩展7位编码类型,分析结束;本步骤目的并不在于替换保存的较高等级编码,目的在于在后续统计参与编码的字符时,作为是否将参与编码字符数量增1的依据。
E10、判断本字符的所属的国际码字符码值是否小于等于255,如果本字符的国际字符码值大于255,进入步骤E2,否则进入步骤E11;因为在此步骤中,本字符可能是属于UCS2编码,因此判断其国际码字符码值是否大于255,是则进入步骤E2,返回UCS2编码方式,否则进入步骤E11。
E11、判断本次分割前分析的所有字符中是否有码值大于255的字符,是则进入步骤E2,否则进入步骤E5。
在确定本字符编码不属于UCS2编码下,分析本次分割前分析的所有字符中是否有码值大于255的字符,如果有,则应该将已保存较高等级编码方式替换为UCS2编码,否则返回8位编码方式,最终完成与此前保存的较高等级编码方式比较的流程。
F、依据较高等级编码方式统计当前需要参与编码的字符数量。
此步骤的目的在于在每次分析字符的循环中,统计出按照当前较高等级编码方式对应的已读的参与编码的字符数量,以便于用作后续判断是否长短信的参数。所述的参与编码的字符数量可能与上述本次所读取的字符偏移量不同,比如对一个扩展7位编码字符来说,其读取时字符偏移量是增1,而此时参与编码的字符数量就增2,因为字符偏移量的计算是16位步进的,而参与编码的字符数量是按编码来计算。扩展7位编码字符是增加一个7位编码字符后组成的存储长度为14位的字符,如果最后记录的较高等级编码方式是7位编码,则参与编码的字符数多余已记录的字符偏移量。
本步骤具体流程请参阅图3,包括F1、判断7位编码是否为保存的较高等级编码方式,如果不是则进入步骤F2,否则进入步骤F3;判断7位编码是否为保存的较高等级编码方式,目的在于得知保存的较高等级编码方式是否为8位编码或UCS2编码,如果是则因为参与编码的字符与偏移量一致,因此不需要后续的参与编码的字符量的计算;否则需要计算参与编码的字符量。
F2、返回本次分割前分析的字符总数;不要后续的参与编码的字符量的计算,返回本次分割前分析的字符总数。
F3、取当前字符类型;从上述步骤E取得当前字符类型,以作为后续计算的参数。
F4、判断是否扩展7位编码字符,是则进入步骤F5,否则进入步骤F6;F5、本次分析的扩展7位编码字符总数加1;由于扩展7位编码字符是增加一个7位编码字符后组成的存储长度为14位的字符,因此需参与编码字符量需要增1,因为在8位或UCS2编码时存储长度为14位的扩展7位编码字符其字符量算作1个,在7位编码方式下则必须算作2个。
F6、返回本次分析的字符总数与扩展7位编码字符总数之和。
将统计的非扩展7位编码的字符量,加上经过上述计算的扩展7位编码字符总数,即可得到当前需要参与编码的字符数量。
G、使用最优的编码方式,与当前所统计的参与编码的字符总数,来计算这些字符数总共需要占用的存储长度。
本步骤是利用上述较高等级编码方式和已记录的本次读取字符偏移量,算出在所述较高等级编码方式下这些已记录字符数量占据的存储长度。比如本次循环分析到第70个字符,发现该字符是UCS2编码字符,则70个字符都必须采用UCS2编码方式进行编码,那上述字符占用的存储长度可以这样计算存储长度=本次参与编码字符数量×当前编码方式对应的字符长度=70×16=1120位。
H、判断占用的存储长度是否大于1072位,小于或等于则进入步骤I,否则进入步骤J;此步骤是预先为短信分割记下可能的分割点。因为一条长短信的子短信其占用的存储长度最大为1072位,因此如果是长短信则需要在需要分割的位置设定一个分割标志。至于进行“小于或等于”的判断,是有可能分析到此处时占用的存储长度刚好是1072位,也可能比1072位小一点的位置。如果有一个字符跨越了“1072位”这个位置,这时当然不能把该字符和前面的字符一起作为一条短信发送,只能把分割点设定在前一个字符上。之所以是可能的分割点,是因为如果是非长短信,那么其存储长度最大为1120位,如果分析完已编辑短信的全部字符其占存储长度还没有超过1120位,则没有必要分割短信,因为该已编辑短信可以作为一条非长短信发送。
I、保存本次字符偏移量和编码方式,返回步骤B。
保存本次字符偏移量和编码方式的目的在于为完成此次分割短信做准备,这些字符和编码方式用于组建最终发送的短信。虽然前面步骤C和E已经进行过保存字符偏移量和编码方式的动作,但如果该已编辑短信是长短信,并且已读取字符所占的存储长度超过1072位、未超过1120位前,步骤C和E保存的字符偏移量会被修改,而编码方式也可能被修改,这样后续确定需分割短信时,会造成组建该子短信需要的字符偏移量和编码方式数据错误,造成分割失败,因此需要对分割点的字符偏移量和编码方式单独保存。
J、判断短信类型标识是否为长短信,是长短信则进入步骤M,否则进入步骤K。
此步骤是当判断占用的存储长度大于1072位时启动,此时进行短信类型标识是否为长短信的判断,目的在于将此短信发送标记为长短信发送,使得网络或对方知道分割后的子短信是属于一条长短信的。如果短信被分割,其类型标识会由第一次分割前的非长短信改为长短信。长短信分割后的子短信只能发送1072位存储容量,因此读取的字符所占存储长度单元大于1072位即可进行分割操作。如果不是长短信,则在存储长度小于或等于1120位时继续分析字符,直至最终判定是非长短信。
K、判断占用的存储长度是否小于或等于1120位,是则单独保存所读取的字符偏移量与编码方式,返回步骤B,否则进入步骤L;此步骤目的在存储长度小于或等于1120位、继续分析字符时判断此已编辑短信是否存在非长短信的可能。如果此时占用的存储长度大于1120位,则已经确认是长短信。如果小于或等于1120位,并且已经读完全部字符则判断已编辑短信非长短信,并且单独保存所读取的字符偏移量与编码方式,以用于对短信进行编码。
以上的步骤F~K可以判断短信类型,以确定所述的独立短信所能发送的最大长度。
以下步骤L和M是采用所述选择的编码方式对该长度内字符进行编码,以组建一条能独立发送的短信。
L、认为已编辑短信需要分割,将非长短信类型标识更改为长短信。
此时记录本次所读取的字符偏移量与编码方式,所述字符偏移量作为长短信截取点,所述编码方式用于对字符进行编码。
M、保存所能够构成一条短信的字符串、编码方式以及字符串长度(偏移量)等信息。
此步骤是短信一次分割完成,因此组建一条不超过标准长度的短信。如果还有字符没有分析完,继续以下步骤。
N、判断是否结束标识,是则进入步骤O;否则返回步骤A。
此时分析是否到了已编辑短信的末端,即是否分析到了结束标识,是则应该结束短信分割流程,否则返回步骤A继续下一条子短信的分割操作。下一条短信分割流程的读取字符步骤是从上次分割过程中C步骤记录的字符偏移量所指向的后一个字符开始,在再次读取到长短信一次发送的最大长度时再次截取该长度内的字符。
O、短信分割结束。
这里可以举一个例子对本发明短信处理方法进行说明,例如短信的内容有160个字符,前153个为7位字符,后7个为Unicode字符,如果简单地统一采用UCS2编码方式,每个字符分配16位存储容量,则存储容量是160×16=2560。对于长短信来说,每个子短信的最大容量是1072,所以这160个字符必须分成3条子短信(67+67+26)发送。
依照本发明,则不是统一采用UCS2编码方式对短信全部内容进行编码,而是首先得知该短信的短信类型为长短信;然后对短信进行分割,第一次分割点在整条短信的第1071存储位,即第153个字符。此153个字符用7位编码方式进行编码,并作为所述长短信的第一条子短信进行发送。还剩后面的7个字符用UCS2编码方式进行编码,作为所述长短信的第二条子短信进行发送,这样就可以节省一条短信的发送量。
从以上可以看出,在多种类型字符混合的长短信需要发送前,本发明采用对长短信内容进行分割的方式,对每条分割的短信采用较优编码方式进行编码,避免统一用一种编码方式对整条短信编码。也就是动态地分析每一个字符所属的字符类型来决定一条能够独立发送的短信所应该选取的较优编码方式、动态统计在较优编码方式下参与编码的字符数量最大值,取可以实现独立发送短信的字符数量最多的一种编码方式来组成一条可独立发送的短信,使一条独立发送的短信能够发送最大数量的信息内容。对所述长短信重复使用上述方法,则对整个短信内容而言可能就会采用多种编码方式与分割方式,避免简单地对整条短信使用单一的编码方式而导致长短信分割后发送次数多、发送的短信空间利用率低、用户费用增加的情况,从而减少长短信的分割条数和提高空间利用率。
如前所述,2006年1至4月中国手机短信量达到1322.5亿条,如果其中有1%的长短信,那么就有13.225亿条,假设每条长短信发送都节省一次发送量,那么就减少13.225亿次,每条短信0.1元计,可减少信息费用1.3225亿元,大大减轻了用户费用负担,同时由于网络系统减少13.225亿次信息传送操作,较大程度降低系统负担。
参阅图4,本发明短信处理方法还提供第二实施方式,该实施方式是在已知该已编辑完成的短信是长短信类型情况下进行短信分割的处理,本实施方式类似于本发明第一实施方式,基本包括步骤A、初始化需发送短信的编码方式为最低等级,也就是7位编码方式,初始化短信类型为非长短信,扩展7位字符为0。
初始化的作用在于无论短信内容为何,预先设定其编码方式为最低等级并且短信类型为非长短信,如果分割结果是全部短信内容属于最低等级编码,即不需要采用较高级编码方式,从而节省存储器空间,减少分割条数。如果最后判断的结果是长短信,那么可能进行多次分割,每次分割的流程步骤A都需要初始化需发送短信的编码方式为最低等级,但短信类型标识仅初始化一次,即如果多次分割,第一次分割的流程需要初始化,其他分割流程不需要初始化。
B、从需发送的短信内容中读取一个字符,判断是否字符结束标识,是则更改结束标识,直接转到步骤M,否则继续以下步骤。
从第一个字符开始分析,如果第一个字符就已经是短信结尾,说明是空短信,在后续循环分析中,如果该字符表明已经是短信结尾,则没有必要再分析,结束循环。
C、记录本次所读取的字符偏移量。
所述的字符偏移量是指相对于第一次读取字符的位置来说的,比如第一次读取字符,那么这个字符偏移量是1,第n次读取字符,那么这个字符偏移量是n。读取的间隔是16位,因为在此之前,所有属于7位、扩展7位、8位或者UCS2编码类型的字符都转换成了Unicode字符。在后续的分割短信流程中,所述字符偏移量作为短信分割点的依据。
D、判断该字符所属类型和编码方式。
即判断该字符所属的编码类型,分析其属于标准7位、扩展7位、8位或者UCS2编码字符的哪一种,进而确定7位、8位或者UCS2编码方式。
E、与此前保存的较高等级编码方式比较,如果此字符的编码方式等级更高,则将当前编码方式替换所保存的编码方式。
此步骤的目的在于因为每个单独发送的短信只能采用一种编码方式,而且是采用能对所有字符进行编码的编码方式来进行编码,因此这里在分析短信字符的同时,将分析到的属于较高等级的字符的编码方式记录下来,这样就能得到短信里面字符所属较高等级的编码方式,因而利于后续的短信占用存储量长度计算。
F、依据较高等级编码方式统计当前需要参与编码的字符数量。
此步骤的目的在于在每次分析字符的循环中,统计出按照当前较高等级编码方式对应的已读的参与编码的字符数量,以便于用作后续判断是否长短信的参数。
G、使用最优的编码方式,与当前所统计的参与编码的字符总数,来计算这些字符数总共需要占用的存储长度。
本步骤是利用上述较高等级编码方式和已记录的本次读取字符偏移量,算出在所述较高等级编码方式下这些已记录字符数量占据的存储长度。比如本次循环分析到第70个字符,发现该字符是UCS2编码字符,则70个字符都必须采用UCS2编码方式进行编码,那上述字符占用的存储长度可以这样计算存储长度=本次读取字符偏移量×当前编码方式对应的字符长度=70×16=1120位。
H、判断占用的存储长度是否大于1072位,小于或等于则进入步骤I,否则进入步骤M;此步骤是预先为短信分割记下分割点。因为一条长短信的子短信其占用的存储长度最大为1072位,因此需要在需要分割的位置设定一个分割标志。至于进行“小于或等于”的判断,是有可能分析到此处时占用的存储长度刚好是1072位,也可能比1072位小一点的位置,即有一个字符跨越了“1072位”这个位置。这时当然不能把该字符和前面的字符一起作为一条短信发送,只能把分割点设定在前一个字符上。
I、保存本次字符偏移量和编码方式,返回步骤B。
保存本次字符偏移量和编码方式的目的在于为完成此次分割短信做准备,这些字符偏移量和编码方式用于组建最终发送的短信。虽然前面步骤C和E已经进行过保存字符偏移量和编码方式的动作,但如果该已编辑短信是长短信,并且已读取字符所占的存储长度超过1072位,步骤C和E保存的字符偏移量会被修改,而编码方式也可能被修改,这样后续确定需分割短信时,会造成组建该子短信需要的字符偏移量和编码方式数据错误,造成分割失败,因此需要对分割点的字符偏移量和编码方式单独保存。
此处省略第一实施方式中的J,K,L步骤,因为不需要进行是否长短信的判断。
M、保存所能够构成一条短信的字符串、编码方式以及字符串长度(偏移量)等信息。
此步骤是短信一次分割完成,因此组建一条不超过标准长度的短信。如果还有字符没有分析完,继续以下步骤。
N、判断是否结束标识,是则进入步骤O;否则返回步骤A。
此时分析是否到了已编辑短信的末端,即是否分析到了结束标识,是则应该结束短信分割流程,否则返回步骤A继续下一条子短信的分割操作。下一条短信分割流程的读取字符步骤是从上次分割过程中C步骤记录的字符偏移量所指向的后一个字符开始。
O、短信分割结束。
从以上可以看出,由于不需要对是否长短信进行判断,因此较本发明第一实施方式减少步骤。但同样可以实现减少长短信的分割条数、提高空间利用率、降低用户费用和降低系统负担的目的。
本发明第三实施方式是在判断整个短信内容当中有只能使用UCS2编码的字符,可以在本发明第一实施方式或第二实施方式中嵌入以下方法,加快分析的速度,分析步骤如下F’、在上述本发明第一实施方式或第二实施方式的步骤D中,一旦判断出只能使用UCS2编码的字符,直接判断整个短信的长度,类似于上述步骤F,但统计的是整个短信长度。
K’、如果整个短信长度小于等于70,将所有的字符保存,编码方式为UCS2,保存分析信息以组建一条短信。
L’、如果整个短信长度大于70,则可以肯定整个短信内容是需要分割成多条子短信的,执行第一实施方式的步骤L,将短信类型标识更改为长短信状态。
C’、根据上述步骤C,判断字符偏移量是否大于67。
I’、如果字符数小于等于67个,那么直接从起始位置开始往后截取67个字符,编码方式为UCS2,保存分析信息以组建一条短信。
J’、如果大于67,将此字符前面的所有字符截取保存,编码方式采用此字符前面分析出的较高等级编码方式,保存分析信息以组建一条短信。并且还从此字符开始往后截取67个字符,不足67个字符时,截取所有剩余的字符,编码方式为UCS2,保存分析信息以组建一条短信。如果还有剩余字符,采取以上方式继续分割。
上述加快方法是在判断字符类型时,一旦发现只能使用UCS2编码的字符,则无需再进行后续判断字符类型的步骤,直接用此编码进行短信处理,实现与上述第一、第二实施方式一样的发明效果,同时加快处理流程。
上述流程中的较高等级编码方式可以不是唯一的,也就是说,如果统计完在最大长度内的全部字符后,发现7位或8位编码都可以将所述全部字符编码,按照上述流程应该选择7位编码对短信字符进行编码然后发送,这里可以选择8位编码对短信字符进行编码然后发送,同样可以减少长短信的分割条数。
参阅图5,本发明还提供一种短信处理装置,所述装置包括字符类型分析模块100、编码方式判断模块200、编码模块400、短信类型判断模块300以及长短信截取模块500。
所述字符类型分析模块100用于在短信发送前分析短信内字符的类型,其包括字符读取模块101和字符类型与编码判断模块102。所述字符读取模块101用于从需发送的短信中读取一个字符,所述字符类型与编码判断模块102用于判断该字符所属类型和当前编码方式。
所述编码方式判断模块200用于在一次短信可以发送的最大长度内而且不含只能采用最高等级编码进行编码的字符类型情况下,选择能够将该长度内所有类型字符进行编码的一种等级较最高等级编码方式低的编码方式。所述编码方式判断模块200包括编码方式比较模块202和编码方式保存模块201。所述编码方式比较模块202用于比较所述当前编码方式与此前保存的编码方式,在该字符的编码方式等级高于所述保存的编码方式情况下,在编码方式保存模块201内将当前编码方式替换所保存的编码方式,并由字符读取模块101继续读取字符,直至已读取字符的存储长度达到所述最大长度。
所述编码模块400用于采用所述选择的编码方式对该长度内字符进行编码,以组建一条短信。
所述短信类型判断模块300包括字符数量统计模块301、存储长度计算模块302、存储长度判断模块303以及字符偏移量与编码方式单独保存模块304。所述字符数量统计模块301用于依据保存的编码方式统计当前需要参与编码的字符数量。所述存储长度计算模块302用于依据所述保存的编码方式与当前所统计的参与编码的字符总数,计算该等字符总共需要占用的存储长度。所述存储长度判断模块303用于判断占用的存储长度是否小于或等于1120位,是并且已经读完全部字符则判断短信类型为非长短信,否则判断短信类型为长短信。所述字符偏移量与编码方式单独保存模块304201用于在判断占用的存储长度小于或等于1120位、并且还剩未读取字符时单独保存所读取的字符偏移量与编码方式,所述编码方式用于在确定短信类型为非长短信时对字符进行编码。
所述长短信截取模块500在所述占据的存储长度大于1120位、并且判断短信类型为长短信时,用于根据记录的本次所读取的字符偏移量与编码方式、分别设定所述长短信截取点对字符进行编码。
本发明短信处理装置的基本运作流程是字符类型分析模块100首先启动,在发送前对已编辑的短信进行读取字符操作。每读取一个字符都伴随后面的分析动作直至循环结束。
具体是所述字符读取模块101从需发送的短信中读取一个字符并记录字符偏移量。所述编码判断模块判断该字符所属类型和当前编码方式,由编码方式比较模块202比较所述当前编码方式与此前保存的编码方式,在该字符的编码方式等级高于所述保存的编码方式情况下,在编码方式保存模块201内将当前编码方式替换所保存的编码方式。所述字符数量统计模块301依据保存的编码方式统计当前需要参与编码的字符数量,由存储长度计算模块302依据所述保存的编码方式与当前所统计的参与编码的字符总数,计算该等字符总共需要占用的存储长度。然后由存储长度判断模块303判断占用的存储长度是否小于或等于1120位,是并且已经读完全部字符则判断短信类型为非长短信,否则判断短信类型为长短信。
然后,字符偏移量与编码方式单独保存模块304在判断占用的存储长度小于或等于1120位、并且还剩未读取字符时单独保存所读取的字符偏移量与编码方式,用于在确定短信类型为非长短信时对字符进行编码。如果存储长度大于1120位则由长短信截取模块500根据记录的本次所读取的字符偏移量与编码方式、分别设定所述长短信截取点对字符进行编码。直至分析完整条已编辑的短信。
其中,在字符类型分析模块100判断该字符所属类型为UCS2编码时,由字符偏移量记录模块记录整个短信的长度,在整个短信长度大于70情况下,所述短信类型判断模块300判断得到该短信的短信类型是长短信,并在字符偏移量记录模块记录的字符偏移量大于67情况下,由长短信截取模块500将此字符前面的67个字符截取,并由编码模块400进行编码。
从以上可以看出,在多种类型字符混合的长短信需要发送前,本发明采用编码方式判断模块和短信类型判断模块判断出能对单条分割的子短信字符全部编码的较优编码方式,避免统一用一种编码方式对整条短信编码。也就是采用字符类型分析模块动态地分析每一个字符所属的字符类型,并配合编码方式判断模块来决定一条能够独立发送的短信所应该选取的较优编码方式、动态统计在较优编码方式下参与编码的字符数量最大值,取可以实现独立发送短信的字符数量最多的一种编码方式来组成一条可独立发送的短信,使一条独立发送的短信能够发送最大数量的信息内容。避免简单地对整条短信使用单一的编码方式而导致长短信分割后发送次数多、发送的短信空间利用率低、用户费用增加的情况,从而减少长短信的分割条数、提高空间利用率、降低用户费用负担以及降低系统负担。
以上对本发明所提供的一种短信处理方法以及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种短信处理方法,其特征在于,包括步骤分析短信内字符的类型;在一次短信可以发送的最大长度内,选择能够将该长度内对分析的所有类型的字符进行编码的一种等级较最高等级编码方式低的编码方式;采用所述选择的编码方式对该长度内字符进行编码,以组建一条短信。
2.根据权利要求1所述的短信处理方法,其特征在于,所述分析短信内字符的类型包括步骤从需发送的短信中逐个读取字符;判断当前字符所属类型和编码方式;所述判断编码方式的步骤包括比较所述当前字符编码方式与刚好能对已读全部字符编码的编码方式,在当前字符编码方式等级较高情况下,保存当前字符编码方式;返回读取字符的步骤,直至已读取字符的存储长度达到所述最大长度;选择一种等级大于或等于保存的编码方式、并且低于最高等级编码的编码方式。
3.根据权利要求2所述的短信处理方法,其特征在于,确定所述最大长度的步骤为判断短信类型,是长短信则所述最大长度为小于或等于1072位,否则所述最大长度为1120位。
4.根据权利要求3所述的短信处理方法,其特征在于,在读取一个字符后记录本次所读取的字符偏移量;所述判断短信类型的步骤包括依据保存的编码方式统计当前需要参与编码的字符数量;依据保存的编码方式与当前所统计的参与编码的字符总数,计算所述字符总共需要占用的存储长度;判断占用的存储长度是否小于或等于1120位,是并且已经读完全部字符则判断短信类型为非长短信,否则判断短信类型为长短信。
5.根据权利要求4所述的短信处理方法,其特征在于,所述判断占用的存储长度小于或等于1072位、并且还剩未读取字符时进一步包括单独保存所读取的字符偏移量与编码方式的步骤,所述编码方式用于在确定短信类型为非长短信时对字符进行编码。
6.根据权利要求4所述的短信处理方法,其特征在于,在所述占据的存储长度大于1072位、并且判断短信类型为长短信时进一步包括,返回记录本次所读取的字符偏移量与编码方式的步骤,所述字符偏移量作为长短信截取点,所述编码方式用于对字符进行编码。
7.根据权利要求4所述的短信处理方法,其特征在于,在分析短信内字符的类型之前进一步包括,初始化短信类型为非长短信的步骤;在判断短信类型为长短信时继续进行读取字符;在再次读取到长短信一次发送的最大长度时截取该长度内的字符。
8.根据权利要求4所述的短信处理方法,其特征在于,在判断该字符所属类型为只能用UCS2编码的类型时,判断整个短信的长度,如果整个短信长度大于70个字符,则判断该短信的短信类型是长短信,此时判断字符偏移量是否大于67个字符,是则将此字符前面的67个字符截取并编码。
9.根据权利要求1所述的短信处理方法,其特征在于,所述编码方式是能够将该长度内所有类型字符进行编码的最低等级编码方式。
10.一种短信处理装置,其特征在于,包括字符类型分析模块、编码方式判断模块以及编码模块,所述字符类型分析模块用于在短信发送前分析短信内字符的类型,所述编码方式判断模块用于在一次短信可以发送的最大长度内,选择能够将该长度内所有类型字符进行编码的一种等级较最高等级编码方式低的编码方式,所述编码模块用于采用所述选择的编码方式对该长度内字符进行编码,以组建一条短信。
11.根据权利要求10所述的短信处理装置,其特征在于,所述字符类型分析模块包括字符读取模块和字符类型与编码判断模块,所述编码方式判断模块包括编码方式比较模块和编码方式保存模块,所述字符读取模块用于从需发送的短信中逐个读取字符,所述字符类型与编码判断模块用于判断该字符所属类型和当前编码方式,所述编码方式比较模块用于比较所述当前字符编码方式与刚好能对已读全部字符编码的编码方式,在当前字符编码方式等级较高情况下,保存当前字符编码方式,并由字符读取模块继续读取字符,直至已读取字符的存储长度达到所述最大长度。
12.根据权利要求11所述的短信处理装置,其特征在于,进一步包括短信类型判断模块,其包括字符数量统计模块、存储长度计算模块以及存储长度判断模块,所述字符数量统计模块用于依据保存的编码方式统计当前需要参与编码的字符数量,所述存储长度计算模块用于依据所述保存的编码方式与当前所统计的参与编码的字符总数,计算该等字符总共需要占用的存储长度,所述存储长度判断模块用于判断占用的存储长度是否小于或等于1120位,是并且已经读完全部字符则判断短信类型为非长短信,否则判断短信类型为长短信。
13.根据权利要求12所述的短信处理装置,其特征在于,所述短信类型判断模块进一步包括字符偏移量与编码方式单独保存模块304,其用于在判断占用的存储长度小于或等于1072位、并且还剩未读取字符时单独保存所读取的字符偏移量与编码方式,所述编码方式用于在确定短信类型为非长短信时对字符进行编码。
14.根据权利要求12所述的短信处理装置,其特征在于,进一步包括长短信截取模块,在所述占据的存储长度大于1072位、并且判断短信类型为长短信时,所述长短信截取模块用于根据记录的本次所读取的字符偏移量与编码方式、分别设定所述长短信截取点对字符进行编码。
15.根据权利要求12所述的短信处理装置,其特征在于,在字符类型分析模块判断该字符所属类型为UCS2编码时,由字符偏移量记录模块记录整个短信的长度,在整个短信长度大于70字符情况下,所述短信类型判断模块判断得到该短信的短信类型是长短信,并在字符偏移量记录模块记录的字符偏移量大于67字符情况下,由长短信截取模块将此字符前面的67个字符截取,并由编码模块进行编码。
全文摘要
本发明公开一种短信处理方法和一种短信处理装置,在短信发送前,所述方法包括步骤分析短信内字符的类型;在一次短信可以发送的最大长度内,选择能够将该长度内所有类型字符进行编码的一种等级较最高等级编码方式低的编码方式;采用所述选择的编码方式对该长度内字符进行编码,以组建一条短信。本发明可减少长短信的分割条数、提高空间利用率、降低用户费用负担以及降低系统负担。
文档编号G06F17/00GK101047733SQ20061009144
公开日2007年10月3日 申请日期2006年6月16日 优先权日2006年6月16日
发明者唐志雄 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1