一种数据截取的方法和装置制造方法

文档序号:6485931阅读:327来源:国知局
一种数据截取的方法和装置制造方法
【专利摘要】本发明公开了一种数据截取的方法和装置,能够达到对截取的数据解码后不会出现乱码,提高解码质量和用户体验的技术效果。本发明实施例提供的一种数据截取的方法包括:将需要截取的字符串转换为预定编码格式;判断转换后的字符串的长度是否大于截取长度,若否,提取所有转换后的字符串作为截取到的数据;若是,执行如下处理:将截取长度所对应的字节作为截取点字节,并根据所述预定编码格式,判断所述截取点字节是否位于后一个字符的开头字节之前;若是,从字符串的起始字节至所述截取点字节对转换后的字符串进行截取,作为截取到的数据;若否,利用所述截取点字节的前一字节更新截取点字节,直至判断出截取点字节位于后一个字符的开头字节之前。
【专利说明】一种数据截取的方法和装置
【技术领域】
[0001]本发明涉及信息处理【技术领域】,特别涉及一种数据截取的方法和装置。
【背景技术】
[0002]在数据传输和存储的过程中,由于容量的限制等因素,在很多场景下,都需要对原数据进行截取处理。例如,在传输协议中,头信息一般会固定长度。如果头信息超过了这个固定长度,就需要对这个头信息进行截取。现有方案通常采用直接从原数据中截取固定长度数据的方式进行数据截取。
[0003]然而,现有的截取方案至少存在如下问题:
[0004]当信息中包含了采用统一码(UNICODE)编码的字符时,由于一个字符所对应的UNICODE编码字节个数不确定,则有极大的可能所截取的最后一个字节是代表一个字符的若干字节中的中间的某个字节,从而导致对截取到的数据解码时最后一个字符的位置出现乱码,降低了解码质量和用户体验。

【发明内容】

[0005]本发明提供的一种数据截取的方法和装置,以解决现有数据截取方案导致解码后最后一个字符为乱码,解码质量和用户体验较低的问题。
[0006]为达到上述目的,本发明实施例采用了如下技术方案:
[0007]本发明实施例提供的一种数据截取的方法包括:
[0008]将需要截取的字符串转换为预定编码格式;
[0009]判断转换后的字符串的长度是否大于截取长度,若否,提取所有转换后的字符串作为截取到的数据;若是,执行如下处理:
[0010]将截取长度所对应的字节作为截取点字节,并根据所述预定编码格式,判断所述截取点字节是否位于后一个字符的开头字节之前;
[0011]若是,从字符串的起始字节至所述截取点字节对转换后的字符串进行截取,作为截取到的数据;若否,利用所述截取点字节的前一字节更新截取点字节,直至判断出截取点字节位于后一个字符的开头字节之前。
[0012]本发明实施例提供的一种数据截取的装置包括:
[0013]格式转换单元,用于将需要截取的字符串转换为预定编码格式;
[0014]长度判断单元,用于判断转换后的字符串的长度是否大于截取长度;
[0015]第一截取单元,用于在长度判断单元判断出转换后的字符串的长度不大于截取长度时,提取所有转换后的字符串作为截取到的数据;
[0016]第二截取单元,用于在长度判断单元判断出转换后的字符串的长度大于截取长度时,将截取长度所对应的字节作为截取点字节,并根据所述预定编码格式,判断所述截取点字节是否位于后一个字符的开头字节之前,若是,从字符串的起始字节至所述截取点字节对转换后的字符串进行截取,作为截取到的数据;若否,利用所述截取点字节的前一字节更新截取点字节,直至判断出截取点字节位于后一个字符的开头字节之前。
[0017]本发明实施例的有益效果是:
[0018]本发明实施例通过在预定编码格式下,判断截取点字节是否位于后一字符的开头字节之前,并在截取长度内从位于后一字符开头字节之前的截取点字节执行数据的截取,确保了截取点不会出现在一个字符的多个字节的中间,能够达到对截取的数据解码后不会出现乱码,提高解码质量和用户体验的技术效果。
【专利附图】

【附图说明】
[0019]图1为本发明实施例一提供的一种数据截取的方法流程图;
[0020]图2为本发明实施例二提供的判断截取点字节位置的方法流程图;
[0021]图3为本发明实施例三提供的一种数据截取的装置结构示意图。
【具体实施方式】
[0022]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0023]本发明的技术构思主要在于每个字符都有对应的一个UNICODE表示,根据UNICODE编码和预定编码(如UTF-8编码)的对应关系,可以找出一个UNICODE字符的开头,如找出一个汉字的开头,该字符的开头之前,就是前面字符的结尾。这样的话,在截取时,通过只截取到前面字符结尾部分,即当前字符开头的前面,就不会出现截取到字符的中间字节导致对截取数据无法正常解码的问题,从而对字符的截取更精确,解码质量和用户体验更好。
[0024]本发明实施例一提供的一种数据截取的方法,参见图1,包括:
[0025]11:将需要截取的字符串转换为预定编码格式。
[0026]12:判断转换后的字符串的长度是否大于截取长度,若否,执行步骤13,若是,执行步骤14。
[0027]13:提取所有转换后的字符串作为截取到的数据,截取操作结束。
[0028]14:将截取长度所对应的字节作为截取点字节,并根据所述预定编码格式,判断所述截取点字节是否位于后一个字符的开头字节之前,若是,执行步骤15,若否,执行步骤16。其中,在“判断所述截取点字节是否位于后一个字符的开头字节之前”的步骤中,将截取点字节所归属的字符作为当前字符时,后一个字符是指在字符串中紧邻该当前字符且在当前字符之后的下一个字符。后一个字符可以包含一个或多个字节,当后一个字符包含一个字节(如字节I)时,上述开头字节即为这个字节(即字节1),当后一个字符包含多个字节(如字节I至字节3)时,上述开头字节即为这多个字节中的第一个字节(字节I)。
[0029]15:从字符串的起始字节至所述截取点字节对转换后的字符串进行截取,作为截取到的数据,截取操作结束。
[0030]16:利用所述截取点字节的前一字节更新截取点字节,对更新后的截取点字节重复上述步骤14中的判断操作,直至判断出截取点字节位于后一个字符的开头字节之前,截取操作才结束。其中,在“利用所述截取点字节的前一字节更新截取点字节”的步骤中,截取点字节的前一字节是指在字符串中紧邻截取点字节且在截取点字节之前的上一个字节,更新的方式可以为将当前截取点字节的前一字节作为更新后所使用的截取点字节。
[0031]注:对于本实施例中所描述的“前” “后”方向,一种示例的方式为将字符串的起始字节所在的位置视为前方,将字符串的结尾字节所在的位置视为后方。
[0032]上述预定编码格式可以为8比特统一码转换格式(8-bit UnicodeTransformation Format, UTF-8), UTF-8 是一种针对统一码(Unicode)的可变长度字符编码,其用I到6个字节编码UNICODE字符,UTF-8的转换表参见下述表1,其中,符号X表示该比特位的数值既可能为0也可能为I。
[0033]
【权利要求】
1.一种数据截取的方法,其特征在于,所述方法包括: 将需要截取的字符串转换为预定编码格式; 判断转换后的字符串的长度是否大于截取长度,若否,提取所有转换后的字符串作为截取到的数据;若是,执行如下处理: 将截取长度所对应的字节作为截取点字节,并根据所述预定编码格式,判断所述截取点字节是否位于后一个字符的开头字节之前; 若是,从字符串的起始字节至所述截取点字节对转换后的字符串进行截取,作为截取到的数据;若否,利用所述截取点字节的前一字节更新截取点字节,直至判断出截取点字节位于后一个字符的开头字节之前。
2.根据权利要求1所述的方法,其特征在于, 所述预定编码格式为8比特统一码转换格式UTF-8。
3. 根据权利要求2所述的方法,其特征在于,利用如下方式,根据所述预定编码格式,判断所述截取点字节是否位于后一个字符的开头字节之前: 判断截取点字节的后一字节的最高位是否为O,若是,则确认该截取点字节位于后一个字符的开头字节之前,若否,判断截取点字节的后一字节的次高位是否为1,若该次高位为I,则确认该截取点字节位于后一个字符的开头字节之前,若该次高位不为I,确认该截取点字节不位于后一个字符的开头字节之前。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括: 对所述截取到的数据按照UTF-8编码格式进行解码。
5.根据权利要求1至3任一项所述的方法,其特征在于,在所述将需要截取的字符串转换为预定编码格式之前,所述方法还包括: 判断需要截取的字符串是否为空,若为空,返回空字符串,若不为空,将需要截取的字符串转换为预定编码格式。
6.一种数据截取的装置,其特征在于,所述装置包括: 格式转换单元,用于将需要截取的字符串转换为预定编码格式; 长度判断单元,用于判断转换后的字符串的长度是否大于截取长度; 第一截取单元,用于在长度判断单元判断出转换后的字符串的长度不大于截取长度时,提取所有转换后的字符串作为截取到的数据; 第二截取单元,用于在长度判断单元判断出转换后的字符串的长度大于截取长度时,将截取长度所对应的字节作为截取点字节,并根据所述预定编码格式,判断所述截取点字节是否位于后一个字符的开头字节之前,若是,从字符串的起始字节至所述截取点字节对转换后的字符串进行截取,作为截取到的数据;若否,利用所述截取点字节的前一字节更新截取点字节,直至判断出截取点字节位于后一个字符的开头字节之前。
7.根据权利要求6所述的装置,其特征在于, 所述格式转换单元,用于将需要截取的字符串转换为8比特统一码转换格式UTF-8。
8.根据权利要求7所述的装置,其特征在于,所述第二截取单元利用如下方式,根据所述预定编码格式,判断所述截取点字节是否位于后一个字符的开头字节之前: 判断截取点字节的后一字节的最高位是否为O,若是,则确认该截取点字节位于后一个字符的开头字节之前,若否,判断截取点字节的后一字节的次高位是否为1,若该次高位为I,则确认该截取点字节位于后一个字符的开头字节之前,若该次高位不为I,确认该截取点字节不位于后一个字符的开头字节之前。
9.根据权利要求6至8任一项所述的装置,其特征在于,所述装置还包括解码单元,用于对所述截取到的数据按照UTF-8编码格式进行解码。、
10.根据权利要求6至8任一项所述的装置,其特征在于,所述装置还包括空字符串处理单元,用于判断需要截取的字符串是否为空,若为空,返回空字符串,若不为空,调用所述格式转换单元将需要截取的字符串转换为预定编码格式。
【文档编号】G06F17/22GK103488617SQ201210192127
【公开日】2014年1月1日 申请日期:2012年6月11日 优先权日:2012年6月11日
【发明者】何庆明, 刘李进 申请人:北京新媒传信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1