字符编码解码方法及装置转让专利

申请号 : CN201410453461.4

文献号 : CN105391514B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 唐炜

申请人 : 北京奇虎科技有限公司奇智软件(北京)有限公司

摘要 :

本发明公开了一种字符编码解码方法及装置,涉及数据传输领域,当字符编码时,不论英文字符较多还是中文字符较多,都能得到相对合适的码流,以便利于传输。本发明的主要编码方案为:根据编码字符码值的大小对编码进行处理,当码值小于或等于127时,则将编码的高位去掉保留低位;若编码字符的码值大于127,则保留原编码并对所述编码字符进行分组,并添加长度编码。本发明主要的解码方案为:确定待解码字符是否为长度编码字符;若不是则顺序读取两个待解码字符并将其拼接为ASCII字符;若是则将长度编码字符对应数量的字符拼接为Unicode字符,并对拼接字符进行解码。本发明主要用于端到端字符传输的过程中。

权利要求 :

1.一种字符编码方法,其特征在于,包括:

在数据传输过程中,获取待编码字符;

将所述待编码字符进行编码得到对应的十六进制串编码字符,每个编码字符的十六进制串包括高位和低位;

计算编码字符的码值;

若所述编码字符的码值小于或等于127,则将对应编码字符十六进制串的高位去掉保留低位;

若所述编码字符的码值大于127,则保留所述编码字符十六进制串,并对所述编码字符进行分组,在组内第一个编码字符前添加十六进制长度编码;

其中,所述长度编码具体为:将16减去组内字符个数得到长度数值;将所述长度数值转换为十六进制编码得到长度编码。

2.根据权利要求1所述的方法,其特征在于,将待编码字符进行编码得到对应的十六进制串编码字符包括:将待编码字符用统一码Unicode进行编码得到对应的十六进制串编码字符;

或者将待编码字符用万国码UTF-8进行编码得到对应的十六进制串编码字符。

3.根据权利要求2所述的方法,其特征在于,每个分组中最多包含8个编码字符。

4.根据权利要求3所述的方法,其特征在于,所述长度编码字符为8、9、A、B、C、D、E或F。

5.一种字符解码方法,其特征在于,包括:

在数据传输过程中,读取待解码字符;

确定所述待解码字符是否为长度编码字符,所述长度编码字符为编码字符的码值大于

127时对编码字符进行分组,并且在组内第一个编码字符前添加的十六进制编码;

若所述待解码字符不为所述长度编码字符,则顺序读取所述待解码字符和与所述待解码字符相邻的另一个待解码字符,将所述两个待解码字符拼接为ASCII字符;

若所述待解码字符为长度编码字符,则将所述长度编码字符对应数量的字符拼接为统一码Unicode字符,其中,当所述长度编码为用16减去组内字符个数得到长度数值,并将所述长度数值转换为十六进制编码得到时,将所述长度编码字符对应数量的字符拼接为统一码Unicode字符包括:获取所述长度编码字符对应分组组内字符的数量L,该数量L=16-x,x为长度编码字符十六进制的码值;顺序读取所述待解码字符后面N个待解码字符,所述N=L*4;将所述N个待解码字符拼接为Unicode字符;

将所述ASCII字符或Unicode字符进行解码得到解码字符。

6.根据权利要求5所述的方法,其特征在于,所述长度编码字符为8、9、A、B、C、D、E或F。

7.根据权利要求6所述的方法,其特征在于,确定所述待解码字符是否为长度编码字符包括:读取待解码字符;

若读取的第一个待解码字符为8、9、A、B、C、D、E或F,则确定所述待解码字符为长度编码字符;

若读取的待解码字符为0、1、2、3、4、5、6或7之后的第一字符为8、9、A、B、C、D、E或F,则确定所述待解码字符为长度编码字符;

若读取的待解码字符为长度编码字符对应数量字符之后的第一字符,并且该字符为8、

9、A、B、C、D、E或F,则确定所述待解码字符为长度编码字符。

8.一种字符编码装置,其特征在于,包括:

字符获取单元,用于在数据传输过程中,获取待编码字符;

编码单元,用于将所述待编码字符进行编码得到对应的十六进制串编码字符,每个编码字符的十六进制串包括高位和低位;

计算单元,用于计算编码字符的码值;

第一编码处理单元,用于当所述编码字符的码值小于或等于127时,将对应编码字符十六进制串的高位去掉保留低位;

第二编码处理单元,用于当所述编码字符的码值大于127时,保留所述编码字符十六进制串,并对所述编码字符进行分组,在组内第一个编码字符前添加十六进制长度编码;

长度编码获取单元,用于在所述第二编码处理单元在组内第一个编码字符前添加十六进制长度编码之前,将16减去组内字符个数得到长度数值;将所述长度数值转换为十六进制编码得到长度编码。

9.根据权利要求8所述的编码装置,其特征在于,所述编码单元包括:第一编码模块,用于将待编码字符用统一码Unicode进行编码得到对应的十六进制串编码字符;和/或第二编码模块,用于将待编码字符用万国码UTF-8进行编码得到对应的十六进制串编码字符。

10.根据权利要求8所述的编码装置,其特征在于,每个分组中最多包含8个编码字符。

11.根据权利要求10所述的编码装置,其特征在于,所述长度编码字符为8、9、A、B、C、D、E或F。

12.一种字符解码装置,其特征在于,包括:

读取单元,用于在数据传输过程中,读取待解码字符;

确定单元,用于确定所述待解码字符是否为长度编码字符,所述长度编码字符为编码字符的码值大于127时对编码字符进行分组,并且在组内第一个编码字符前添加的十六进制编码,每个组内最多包含8个编码字符;

第一拼接单元,用于在确定所述待解码字符不为所述长度编码字符时,顺序读取所述待解码字符和与所述待解码字符相邻的另一个待解码字符,将所述两个待解码字符拼接为ASCII字符;

第二拼接单元,用于在确定所述待解码字符为长度编码字符时,将所述长度编码字符对应数量的字符拼接为Unicode字符,其中,当所述长度编码为用16减去组内字符个数得到长度数值,并将所述长度数值转换为十六进制编码得到时,所述第二拼接单元包括:获取模块,用于获取所述长度编码字符对应分组组内字符的数量L,该数量L=16-x,x为长度编码字符十六进制的码值;读取模块,用于顺序读取所述待解码字符后面N个待解码字符,所述N=L*4;拼接模块,用于将所述N个待解码字符拼接为统一码Unicode字符;

解码单元,用于将所述ASCII字符或Unicode字符进行解码得到解码字符。

13.根据权利要求12所述的解码装置,其特征在于,所述长度编码字符为8、9、A、B、C、D、E或F。

14.根据权利要求13所述的解码装置,其特征在于,所述确定单元包括:读取模块,用于读取待解码字符;

确定模块,用于在读取的第一个待解码字符为8、9、A、B、C、D、E或F时,确定所述待解码字符为长度编码字符;

所述确定模块还用于,在读取的待解码字符为0、1、2、3、4、5、6或7之后的第一字符为8、

9、A、B、C、D、E或F时,确定所述待解码字符为长度编码字符;

所述确定模块还用于,在读取的待解码字符为长度编码字符对应数量字符之后的第一字符,并且该第一字符为8、9、A、B、C、D、E或F时,确定所述待解码字符为长度编码字符。

说明书 :

字符编码解码方法及装置

技术领域

[0001] 本发明涉及数据传输领域,特别是涉及一种字符编码解码方法及装置。

背景技术

[0002] 端到端的传输过程中,数据必须被以某种形式编码后,才能发送。目前常用的编码有Unicode(统一码)、Unicode可变长度字符编码(8-bit Unicode Transformation Format,UTF-8)等。其中,Unicode是一种在计算机上使用的字符编码,是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布;UTF-8是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到4个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。UNICODE编码,中英文字符均占用2字节,当UNICODE编码在英文字符较多的情况下,码流过长,不利于传输。而UTF-8编码,常用英文字符占用1字节长度,中文占用3字节长度,当UTF-8编码在中文较多,英文字符较少的情况下,码流长度过长,不利于传输。

发明内容

[0003] 有鉴于此,本发明提供一种字符编码解码方法,主要目的在于当字符编码时,不论英文字符较多还是中文字符较多,都能得到相对合适的码流,以便利于传输。
[0004] 依据本发明一个方面,提供了一种字符编码方法,包括:
[0005] 在数据传输过程中,获取待编码字符;
[0006] 将所述待编码字符进行编码得到对应的十六进制串编码字符,每个编码字符的十六进制串包括高位和低位;
[0007] 计算编码字符的码值;
[0008] 若所述编码字符的码值小于或等于127,则将对应编码字符十六进制串的高位去掉保留低位;
[0009] 若所述编码字符的码值大于127,则保留所述编码字符十六进制串,并对所述编码字符进行分组,在组内第一个编码字符前添加十六进制长度编码。
[0010] 依据本发明另一个方面,提供了一种字符解码方法,包括:
[0011] 在数据传输过程中,读取待解码字符;
[0012] 确定所述待解码字符是否为长度编码字符,所述长度编码字符为编码字符的码值大于127时对编码字符进行分组,并且在组内第一个编码字符前添加的十六进制编码;
[0013] 若所述待解码字符不为所述长度编码字符,则顺序读取所述待解码字符和与所述待解码字符相邻的另一个待解码字符,将所述两个待解码字符拼接为ASCII字符;
[0014] 若所述待解码字符为长度编码字符,则将所述长度编码字符对应数量的字符拼接为统一码Unicode字符;
[0015] 将所述ASCII字符或Unicode字符进行解码得到解码字符。
[0016] 依据本发明另一个方面,提供了一种字符编码装置,包括:
[0017] 字符获取单元,用于在数据传输过程中,获取待编码字符;
[0018] 编码单元,用于将所述待编码字符进行编码得到对应的十六进制串编码字符,每个编码字符的十六进制串包括高位和低位后;
[0019] 计算单元,用于计算编码字符的码值;
[0020] 第一编码处理单元,用于当所述编码字符的码值小于或等于127时,将对应编码字符十六进制串的高位去掉保留低位;
[0021] 第二编码处理单元,用于当所述编码字符的码值大于127时,保留所述编码字符十六进制串,并对所述编码字符进行分组,在组内第一个编码字符前添加十六进制长度编码。
[0022] 依据本发明另一个方面,提供了一种字符解码装置,包括:
[0023] 读取单元,用于在的数据传输过程中,读取待解码字符;
[0024] 确定单元,用于确定所述待解码字符是否为长度编码字符,所述长度编码字符为编码字符的码值大于127时对编码字符进行分组,并且在组内第一个编码字符前添加的十六进制编码,每个组内最多包含8个编码字符;
[0025] 第一拼接单元,用于在确定所述待解码字符不为所述长度编码字符时,顺序读取所述待解码字符和与所述待解码字符相邻的另一个待解码字符,将所述两个待解码字符拼接为ASCII字符;
[0026] 第二拼接单元,用于在确定所述待解码字符为长度编码字符时,将所述长度编码字符对应数量的字符拼接为统一码Unicode字符;
[0027] 解码单元,用于将所述ASCII字符或Unicode字符进行解码得到解码字符。
[0028] 借由上述技术方案,本发明实施例提供的技术方案至少具有下列优点:
[0029] 本发明提供的字符编码解码的方法及装置,在数据传输过程中,将待编码数据编码得到对应的十六进制串编码字符,每个编码字符的十六进制串包括高位和低位,按照码值对编码后的十六进制串进行处理,当待编码字符对应的十六进制码值小于等于127时,将十六进制的高位去掉保留低位,即将2个字节的编码字符变更为1个字节的编码字符,当待编码字符对应的十六进制码值大于127时,对待编字符编进行分组,并在组内第一个字符编码前加长度编码,用于区别什么样的编码是一个字节,什么样的编码是两个字节,便于解码端准确的解码。其与现有技术相比,能够保证编码字符根据实际需求进行可变长编码,并且编码的最长使用2字节长度,即不论英文字符较多还是中文字符较多,都能得到相对合适的码流,以便利于传输。
[0030] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

[0031] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0032] 图1示出了本发明实施例提供的一种字符编码方法的流程图;
[0033] 图2示出了本发明实施例提供的一种字符解码方法的流程图;
[0034] 图3示出了本发明实施例提供的一种字符编码装置的组成框图;
[0035] 图4示出了本发明实施例提供的另一种字符编码装置的组成框图;
[0036] 图5示出了本发明实施例提供的另一种字符编码装置的组成框图;
[0037] 图6示出了本发明实施例提供的一种字符解码装置的组成框图;
[0038] 图7示出了本发明实施例提供的一种字符解码装置的组成框图;
[0039] 图8示出了本发明实施例提供的一种字符解码装置的组成框图。

具体实施方式

[0040] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0041] 本发明实施例提供一种字符编码方法,如图1所示,该方法包括:
[0042] 101、在数据传输过程中,获取待编码字符。
[0043] 该待编码字符为英文字符或非英文字符。
[0044] 102、将所述待编码字符进行编码得到对应的十六进制串编码字符,每个编码字符的十六进制串包括高位和低位。
[0045] 由于,目前在数据传输过程中,常用的编码有UTF-8、UNICODE等。在将待编码字符进行编码得到对应的十六进制串编码字符时,可以采用但不局限于以下的方式实现,该方法包括:将待编码字符用Unicode进行编码得到对应的十六进制串编码字符;或者将待编码字符用UTF-8进行编码得到对应的十六进制串编码字符。具体的,本发明实施例对此不进行限制。
[0046] 103、计算编码字符的码值;若所述编码字符的码值小于或等于127,则执行104;若所述编码字符的码值大于127,则执行105。
[0047] 104、将对应编码字符十六进制串的高位去掉保留低位。
[0048] 其中,当码值小于或等于127时,高位编码为0,在实际应用时是可以将高位舍弃,例如,字母“a”用Unicode进行编码得到对应的十六进制串编码字符0061,其高位为00,可以将高位00舍弃,得到编码61。
[0049] 105、保留所述编码字符十六进制串,并对所述编码字符进行分组,在组内第一个编码字符前添加十六进制长度编码。
[0050] 其中,当码值大于127时,高位编码不为0,不能将其舍弃,为了区分其是码值大于127的字符编码,需要对该类编码进行标识,该标识转化为二进制首位必须为1,因为127转为8位二进制时,首位为0,例如F(16)=1111(2),8(16)=1000(2)。首位为1之后才能与前一段码值<=127的字符区分开,故在分组之前加一个长度编码,该长度编码的首位必须为1,所以在16进制的编码中,首位为1的字符有8、9、A、B、C、D、E和F,这些编码用来标识分组中数据的长度。
[0051] 在对码值大于127的字符进行分组时,可以8个字符编为一组,不足8个的也可以编为一组,例如,只有一个该类字符,也编为一组;又例如,该类连续字符超过8个时,从高位到低位将每8个字符编为一组,不足8个字符的也编为一组。
[0052] 在分组前添加长度编码时,为了后续解码的方便,我们可以采用但不局限于以下的方式实现,该方法包括:将16减去组内字符个数得到长度数值;将所述长度数值转换为十六进制编码得到长度编码。如例,组内字符长度为x:[1-8],则在分组前面加长度编码为16-x的十六进制编码。例如x=1,加编码F;x=8,加编码8。
[0053] 基于上述字符编码方法,本发明实施例还提供一种字符解码方法,如图2所示,该方法包括:
[0054] 201、在数据传输过程中,读取待解码字符。
[0055] 该待解码字符为一串16进制编码。
[0056] 202、确定所述待解码字符是否为长度编码字符,所述长度编码字符为编码字符的码值大于127时对编码字符进行分组,并且在组内第一个编码字符前添加的十六进制编码;若所述待解码字符不为所述长度编码字符,则执行203;若所述待解码字符为长度编码字符,则执行204。
[0057] 其中,所述长度编码字符可以为8、9、A、B、C、D、E或F。在确定所述待解码字符是否为长度编码字符时,可以逐一读取待解码字符,若读取的第一个待解码字符为8、9、A、B、C、D、E或F,则确定所述待解码字符为长度编码字符;若读取的待解码字符为0、1、2、3、4、5、6或7之后的第一字符为8、9、A、B、C、D、E或F,则确定所述待解码字符为长度编码字符;若读取的待解码字符为长度编码字符对应数量字符之后的第一字符,并且该字符为8、9、A、B、C、D、E或F,则确定所述待解码字符为长度编码字符。
[0058] 203、顺序读取所述待解码字符和与所述待解码字符相邻的另一个待解码字符,将所述两个待解码字符拼接为ASCII字符。
[0059] 204、将所述长度编码字符对应数量的字符拼接为Unicode字符。
[0060] 进一步的,在步骤202确定待解码字符为长度编码字符时,步骤204将所述长度编码字符对应数量的字符拼接为Unicode字符可以采用如下的方法实现,具体为:
[0061] 1)、获取所述长度编码字符对应分组组内字符的数量L,该数量L=16-x,x为长度编码字符十六进制的码值。
[0062] 2)、顺序读取所述待解码字符后面N个待解码字符,所述N=L*4;
[0063] 3)、将所述N个待解码字符拼接为Unicode字符。
[0064] 205、将所述ASCII字符或Unicode字符进行解码得到解码字符。
[0065] 基于上述的编码和解码方法,本发明实施例以编码和解码字符串“abc李卫平”为例进行具体的说明。
[0066] 本发明实施例提供一种字符编码方法,该方法包括:
[0067] 1)、在数据传输过程中,获取待编码字符串“abc李卫平”。
[0068] 2)、将字符串“abc李卫平”用Unicode编码成十六进制串,得到006100620063674E536B5E73。其中,Unicode编码中:字符“a”的编码为0061,“b”的编码为
0062,“c”的编码为0063,“李”的编码为674E,“卫”的编码为536B,“平”的编码为5E73,得到整个字符串的编码为006100620063674E536B5E73。
[0069] 2)、计算每个字符编码字符的码值,若所述编码字符的码值小于或等于127,则执行3);若所述编码字符的码值大于127,则执行4)。
[0070] 其中,字符“a”的码值为:0061=6*16^1+1*16^0=112,小于127;执行3)。
[0071] 字符“b”的码值为:0062=6*16^1+2*16^0=113,小于127;执行3)。
[0072] 字符“c”的码值为:0063=6*16^1+3*16^0=114,小于127;执行3)。
[0073] 字符“李”的码值为:674E=6*16^3+7*16^2+4*16^1+E(14)*16^0=24576+1792+64+14=26446,大于127;执行4)。
[0074] 字符“卫”的码值为:536B=5*16^3+3*16^2+6*16^1+B(11)*16^0=20480+168+96+11=20755,大于127;执行4)
[0075] 字符“平”的编码为5E73=5*16^3+E(14)*16^2+7*16^1+3*16^0=20480+3584+112+3=24179,大于127。执行4)
[0076] 3)、将对应编码字符十六进制串的高位去掉保留低位。
[0077] 字符“a”的十六进制串的高位去掉保留低位为61;
[0078] 字符“b”的十六进制串的高位去掉保留低位为62;
[0079] 字符“c”的十六进制串的高位去掉保留低位为63;
[0080] 字符串“abc”的编码为616263。
[0081] 4)、保留所述编码字符十六进制串,并对所述编码字符进行分组,每个分组中最多包含8个编码字符,在组内第一个编码字符前添加十六进制长度编码。
[0082] 保留字符“李”的十六进制串674E;
[0083] 保留字符“卫”的十六进制串536B;
[0084] 保留字符“平”的十六进制串5E73;
[0085] 字符串“李卫平”连续编码,数量不足8个,但是也将其分为一组,在该组第一个编码字符前添加十六进制长度编码;该长度编码为:16减去3等于13,13对应的十六进制编码为D。因此,字符串“李卫平”的编码为D674E536B5E73。
[0086] 最终待编码字符串“abc李卫平”的编码为616263D674E536B5E73,将该编码串发送给解码端。
[0087] 基于上述实施例的编码方案,本发明实施例提供一种字符解码方法,该方法包括:
[0088] 1)、在数据传输过程中,读取待解码的字符串616263D674E536B5E73,并将该字符串存储。该字符串存储的时候都有一个存储地址,高位到低位的地址从0、1开始。
[0089] 2)、读取位置为0的存储空间中的字符;
[0090] 3)、判断所述存储空间中是否存在字符,若没有字符则退出该次对字符的解码。若存在字符,则执行4)。
[0091] 4)、读取存储位置的字符,将其标记为字符X;判断字符X是否为8、9、A、B、C、D、E或F;若不为8、9、A、B、C、D、E或F,则执行5);若为8、9、A、B、C、D、E或F。则执行7)。
[0092] 其中,若字符X为8、9、A、B、C、D、E或F,表明该字符为分组的长度编码字符,在进行后续字符的读取之前,需要先解码该长度编码字符,确定后续编码字符的长度;若字符X不为8、9、A、B、C、D、E或F,则确定该字符为普通字符,不需要进行长度编码字符的加密,直接读取相关的字符进行解码即可。
[0093] 上述字符串读到第一个字符6时,确定其不是长度编码,执行5)。
[0094] 5)、顺序读取所述待解码字符和与所述待解码字符相邻的另一个待解码字符,将所述两个待解码字符拼接为ASCII字符。执行6)。
[0095] 顺序读取6和与6相邻的另一个待解码字符1,将所述两个待解码字符6和1拼接为ASCII字符,得到61。
[0096] 6)、读取位置加2,执行3),继续执行解码字符的解码。
[0097] 在上述内容之后,读取位置加2读取的待解码字符为6,确定其不是长度编码,执行5),顺序读取待解码字符6和2,将6和2拼接为ASCII字符,得到62。
[0098] 继续执行读取位置加2,执行3);顺序读取待解码字符6和3,将6和3拼接为ASCII字符,得到63。
[0099] 继续执行读取位置加2,执行3),该次读取的待解码字符为D,执行7)。
[0100] 7)、将所述长度编码字符对应数量的字符拼接为统一码Unicode字符。执行8)。
[0101] 具体的,或取所述长度编码字符对应分组组内字符的数量L,该数量L=16-x,x为长度编码字符十六进制的码值,该实施例中D的码值为13,则计算出分组内字符的数量L为3。顺序读取该字符D后面的3*4个字符674E536B5E73,将其拼接为Unicode字符。具体拼接为
3个Unicode字符,分别为674E、536B和5E73。
[0102] 8)、读取位置加L*4+1,并执行3)。
[0103] 执行完上述步骤后,再读取待解码的字符串,没有读取到,结束该次字符串读取操作。
[0104] 基于上述方法实施例,本发明还提供一种字符编码装置,如图3所示,该字符编码装置包括:
[0105] 字符获取单元31,用于在数据传输过程中,获取待编码字符。
[0106] 编码单元32,用于将所述待编码字符进行编码得到对应的十六进制串编码字符,每个编码字符的十六进制串包括高位和低位。
[0107] 计算单元33,用于计算编码字符的码值。
[0108] 第一编码处理单元34,用于当所述编码字符的码值小于或等于127时,将对应编码字符十六进制串的高位去掉保留低位。
[0109] 第二编码处理单35元,用于当所述编码字符的码值大于127时,保留所述编码字符十六进制串,并对所述编码字符进行分组,在组内第一个编码字符前添加十六进制长度编码。每个分组中最多包含8个编码字符,不足8个编码字符也分为一组。所述长度编码字符可以为8、9、A、B、C、D、E或F。
[0110] 进一步的,如图4所示,所述编码单元32包括:
[0111] 第一编码模块321,用于将待编码字符用Unicode进行编码得到对应的十六进制串编码字符;和/或
[0112] 第二编码模块322,用于将待编码字符用UTF-8进行编码得到对应的十六进制串编码字符。
[0113] 进一步的,如图5所示,该字符编码装置还包括:
[0114] 长度编码获取单元35,用于在所述第二编码处理单元35在组内第一个编码字符前添加十六进制长度编码之前,将16减去组内字符个数得到长度数值;将所述长度数值转换为十六进制编码得到长度编码。
[0115] 本发明实施例还提供一种字符解码装置,如图6所示,该字符编码装置包括:
[0116] 读取单元41,用于在数据传输过程中,读取待解码字符;
[0117] 确定单元42,用于确定所述待解码字符是否为长度编码字符,所述长度编码字符为编码字符的码值大于127时对编码字符进行分组,并且在组内第一个编码字符前添加的十六进制编码,每个组内最多包含8个编码字符;所述长度编码字符可以为8、9、A、B、C、D、E或F。
[0118] 第一拼接单元43,用于在确定所述待解码字符不为所述长度编码字符时,顺序读取所述待解码字符和与所述待解码字符相邻的另一个待解码字符,将所述两个待解码字符拼接为ASCII字符;
[0119] 第二拼接单元44,用于在确定所述待解码字符为长度编码字符时,将所述长度编码字符对应数量的字符拼接为Unicode字符;
[0120] 解码单元45,用于将所述ASCII字符或Unicode字符进行解码得到解码字符。
[0121] 进一步的,当所述长度编码为用16减去组内字符个数得到长度数值,并将所述长度数值转换为十六进制编码得到时,如图7所示,所述第二拼接单元44包括:
[0122] 获取模块441,用于获取所述长度编码字符对应分组组内字符的数量L,该数量L=16-x,x为长度编码字符十六进制的码值。
[0123] 读取模块442,用于顺序读取所述待解码字符后面N个待解码字符,所述N=L*4。
[0124] 拼接模块443,用于将所述N个待解码字符拼接为Unicode字符。
[0125] 进一步的,当所述长度编码字符为8、9、A、B、C、D、E或F时,如图8所示,所述确定单元42包括:
[0126] 读取模块421,用于读取待解码字符。
[0127] 确定模块422,用于在读取的第一个待解码字符为8、9、A、B、C、D、E或F时,确定所述待解码字符为长度编码字符。
[0128] 所述确定模块422还用于,在读取的待解码字符为0、1、2、3、4、5、6或7之后的第一字符为8、9、A、B、C、D、E或F时,确定所述待解码字符为长度编码字符。
[0129] 所述确定模块422还用于,在读取的待解码字符为长度编码字符对应数量字符之后的第一字符,并且该第一字符为8、9、A、B、C、D、E或F时,确定所述待解码字符为长度编码字符。
[0130] 本发明提供的字符编码解码的方法及装置,在端到端的数据传输过程中,将待编码数据编码得到对应的十六进制串编码字符,每个编码字符的十六进制串包括高位和低位,按照码值对编码后的十六进制串进行处理,当待编码字符对应的十六进制码值小于等于127时,将十六进制的高位去掉保留低位,即将2个字节的编码字符变更为1个字节的编码字符,当待编码字符对应的十六进制码值大于127时,对待编字符编进行分组,并在组内第一个字符编码前加长度编码,用于区别什么样的编码是一个字节,什么样的编码是两个字节,便于解码端准确的解码。其与现有技术相比,能够保证编码字符根据实际需求进行可变长编码,并且编码的最长使用2字节长度,即不论英文字符较多还是中文字符较多,都能得到相对合适的码流,以便利于传输。
[0131] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0132] 可以理解的是,上述方法及装置中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。
[0133] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0134] 在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0135] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0136] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0137] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0138] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0139] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的字符编码解码方法及装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0140] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
[0141] 本发明公开了A1、一种字符编码方法,包括:
[0142] 在数据传输过程中,获取待编码字符;
[0143] 将所述待编码字符进行编码得到对应的十六进制串编码字符,每个编码字符的十六进制串包括高位和低位;
[0144] 计算编码字符的码值;
[0145] 若所述编码字符的码值小于或等于127,则将对应编码字符十六进制串的高位去掉保留低位;
[0146] 若所述编码字符的码值大于127,则保留所述编码字符十六进制串,并对所述编码字符进行分组,在组内第一个编码字符前添加十六进制长度编码。
[0147] A2、如A1所述的方法,将待编码字符进行编码得到对应的十六进制串编码字符包括:
[0148] 将待编码字符用统一码Unicode进行编码得到对应的十六进制串编码字符;
[0149] 或者将待编码字符用万国码UTF-8进行编码得到对应的十六进制串编码字符。
[0150] A3、如A1或A2所述的方法,所述长度编码具体为:
[0151] 将16减去组内字符个数得到长度数值;
[0152] 将所述长度数值转换为十六进制编码得到长度编码。
[0153] A4、如A3所述的方法,每个分组中最多包含8个编码字符。
[0154] A5、如A4所述的方法,所述长度编码字符为8、9、A、B、C、D、E或F。
[0155] 本发明公开了B6、一种字符解码方法,包括:
[0156] 在数据传输过程中,读取待解码字符;
[0157] 确定所述待解码字符是否为长度编码字符,所述长度编码字符为编码字符的码值大于127时对编码字符进行分组,并且在组内第一个编码字符前添加的十六进制编码;
[0158] 若所述待解码字符不为所述长度编码字符,则顺序读取所述待解码字符和与所述待解码字符相邻的另一个待解码字符,将所述两个待解码字符拼接为ASCII字符;
[0159] 若所述待解码字符为长度编码字符,则将所述长度编码字符对应数量的字符拼接为统一码Unicode字符;
[0160] 将所述ASCII字符或Unicode字符进行解码得到解码字符。
[0161] B7、如B6所述的方法,当所述长度编码为用16减去组内字符个数得到长度数值,并将所述长度数值转换为十六进制编码得到时,将所述长度编码字符对应数量的字符拼接为统一码Unicode字符包括:
[0162] 获取所述长度编码字符对应分组组内字符的数量L,该数量L=16-x,x为长度编码字符十六进制的码值;
[0163] 顺序读取所述待解码字符后面N个待解码字符,所述N=L*4;
[0164] 将所述N个待解码字符拼接为Unicode字符。
[0165] B8、如B6或B7所述的方法,所述长度编码字符为8、9、A、B、C、D、E或F。
[0166] B9、如B8所述的方法,确定所述待解码字符是否为长度编码字符包括:
[0167] 读取待解码字符;
[0168] 若读取的第一个待解码字符为8、9、A、B、C、D、E或F,则确定所述待解码字符为长度编码字符;
[0169] 若读取的待解码字符为0、1、2、3、4、5、6或7之后的第一字符为8、9、A、B、C、D、E或F,则确定所述待解码字符为长度编码字符;
[0170] 若读取的待解码字符为长度编码字符对应数量字符之后的第一字符,并且该字符为8、9、A、B、C、D、E或F,则确定所述待解码字符为长度编码字符。
[0171] 本发明公开了C10、一种字符编码装置,包括:
[0172] 字符获取单元,用于在数据传输过程中,获取待编码字符;
[0173] 编码单元,用于将所述待编码字符进行编码得到对应的十六进制串编码字符,每个编码字符的十六进制串包括高位和低位;
[0174] 计算单元,用于计算编码字符的码值;
[0175] 第一编码处理单元,用于当所述编码字符的码值小于或等于127时,将对应编码字符十六进制串的高位去掉保留低位;
[0176] 第二编码处理单元,用于当所述编码字符的码值大于127时,保留所述编码字符十六进制串,并对所述编码字符进行分组,在组内第一个编码字符前添加十六进制长度编码。
[0177] C11、如C10所述的编码装置,所述编码单元包括:
[0178] 第一编码模块,用于将待编码字符用统一码Unicode进行编码得到对应的十六进制串编码字符;和/或
[0179] 第二编码模块,用于将待编码字符用万国码UTF-8进行编码得到对应的十六进制串编码字符。
[0180] C12、如C10或C11所述的编码装置,还包括;
[0181] 长度编码获取单元,用于在所述第二编码处理单元在组内第一个编码字符前添加十六进制长度编码之前,将16减去组内字符个数得到长度数值;将所述长度数值转换为十六进制编码得到长度编码。
[0182] C13、如C12所述的编码装置,每个分组中最多包含8个编码字符。
[0183] C14、如C13所述的编码装置,所述长度编码字符为8、9、A、B、C、D、E或F。
[0184] 本发明公开了D15、一种字符解码装置,包括:
[0185] 读取单元,用于在数据传输过程中,读取待解码字符;
[0186] 确定单元,用于确定所述待解码字符是否为长度编码字符,所述长度编码字符为编码字符的码值大于127时对编码字符进行分组,并且在组内第一个编码字符前添加的十六进制编码,每个组内最多包含8个编码字符;
[0187] 第一拼接单元,用于在确定所述待解码字符不为所述长度编码字符时,顺序读取所述待解码字符和与所述待解码字符相邻的另一个待解码字符,将所述两个待解码字符拼接为ASCII字符;
[0188] 第二拼接单元,用于在确定所述待解码字符为长度编码字符时,将所述长度编码字符对应数量的字符拼接为Unicode字符;
[0189] 解码单元,用于将所述ASCII字符或Unicode字符进行解码得到解码字符。
[0190] D16、如D15所述的解码装置,当所述长度编码为用16减去组内字符个数得到长度数值,并将所述长度数值转换为十六进制编码得到时,所述第二拼接单元包括:
[0191] 获取模块,用于获取所述长度编码字符对应分组组内字符的数量L,该数量L=16-x,x为长度编码字符十六进制的码值;
[0192] 读取模块,用于顺序读取所述待解码字符后面N个待解码字符,所述N=L*4;
[0193] 拼接模块,用于将所述N个待解码字符拼接为统一码Unicode字符。
[0194] D17、如D15或D16所述的解码装置,所述长度编码字符为8、9、A、B、C、D、E或F。
[0195] D18、如D17所述的解码装置,所述确定单元包括:
[0196] 读取模块,用于读取待解码字符;
[0197] 确定模块,用于在读取的第一个待解码字符为8、9、A、B、C、D、E或F时,确定所述待解码字符为长度编码字符;
[0198] 所述确定模块还用于,在读取的待解码字符为0、1、2、3、4、5、6或7之后的第一字符为8、9、A、B、C、D、E或F时,确定所述待解码字符为长度编码字符;
[0199] 所述确定模块还用于,在读取的待解码字符为长度编码字符对应数量字符之后的第一字符,并且该第一字符为8、9、A、B、C、D、E或F时,确定所述待解码字符为长度编码字符。