数据编码方法、数据解码方法、装置、设备及存储介质与流程

文档序号:20202841发布日期:2020-03-27 20:49阅读:189来源:国知局
数据编码方法、数据解码方法、装置、设备及存储介质与流程

本申请实施例涉及计算机技术领域,尤其涉及一种数据编码方法、数据解码方法、装置、设备及存储介质。



背景技术:

随着计算机技术的发展,终端与服务器之间的数据传输非常普遍。

现有技术中,终端在获取到待传输的数据后,通常会采用规定的编解码规则对数据进行编码,然后将编码后的数据直接发送给服务器。其中,待传输的数据中可以包括英文、汉字和/或数字等,当采用不同的编解码规则时,英文和/或数字与汉字所占的字节数可能不同。例如,当采用8位unicode转换格式(8-bitunicodetransformationformat,utf-8)编解码规则时,一个英文占一个字节,一个汉字占三个字节;当采用统一码(unicode)编解码规则或汉字编码字符集(chineseinternalcodespecification,gbk)编解码规则时,英文和汉字都占两个字节。

现有技术中的服务器从接收的数据流中需要识别出哪些是汉字、哪些是英文、哪些是数字,但由于采用不同的编解码规则时,英文和/或数字与汉字所占的字节数可能不同,使得服务器常常会出现无法识别出哪些是汉字的情况,进而导致服务器生成乱码。



技术实现要素:

本申请实施例提供一种数据编码方法、数据解码方法、装置、设备及存储介质,解决了现有技术中服务器无法识别出哪些是汉字所导致的乱码问题。

第一方面,本申请实施例一种数据编码方法,包括:

获取待传输的原始字符串;

将所述原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到所述原始字符串对应的预设格式的编码数据序列;

按照预设编码规则对所述编码数据序列进行转换,得到目标字符串;其中,所述目标字符串中所包括的字符均为可见字符;

将所述目标字符串发送给服务器,以使所述服务器对所述目标字符串进行解码处理,以得到所述原始字符串。

在一种可能的实现方式中,所述将所述原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到所述原始字符串对应的预设格式的编码数据序列,包括:

针对所述原始字符串中的每个字符,分别根据第一预设函数确定所述字符对应的美国信息交换标准代码ascii值;

若所述字符对应的ascii值大于预设数值,则根据第二预设函数获取所述字符,并根据第三预设函数将所述字符转换为对应的预设格式的编码数据;或者,若所述字符对应的ascii值不大于所述预设数值,则将所述字符对应的ascii值转换为所述字符对应的预设格式的编码数据;

根据所述原始字符串中的每个字符对应的预设格式的编码数据,得到所述原始字符串对应的预设格式的编码数据序列。

在一种可能的实现方式中,所述预设编码规则包括:预设编码子规则和预设映射规则,所述按照预设编码规则对所述编码数据序列进行转换,得到目标字符串,包括:

针对所述编码数据序列中每三个字节所对应的预设格式的编码数据,分别按照所述预设编码子规则进行转换,得到中间转换数据;

根据所述预设映射规则得到各所述中间转换数据对应的目标转换数据;

根据各所述目标转换数据,得到所述目标字符串。

在一种可能的实现方式中,所述预设编码规则还包括:预设字符替换规则,若至少一个所述目标转换数据中包括第一预设字符,所述根据各所述目标转换数据,得到所述目标字符串之前,所述方法还包括:

根据所述预设字符替换规则将所述至少一个目标转换数据中所包括的第一预设字符替换为第二预设字符;

其中,所述第一预设字符为统一资源定位系统url参数中具有确定意义的字符,所述第二预设字符为所述url参数中不具有确定意义的字符。

在一种可能的实现方式中,若所述编码数据序列所包含的字节总数不是三的整数倍,所述针对所述编码数据序列中每三个字节所对应的预设格式的编码数据,分别按照所述预设编码子规则进行转换,得到中间转换数据之前,所述方法还包括:

在所述编码数据序列的末尾补零,使得补零后的编码数据序列所包含的字节总数是三的整数倍;

对应地,所述目标字符串的末尾补预设数量个第三预设字符。

在一种可能的实现方式中,所述预设格式的编码数据包括:采用8位统一码unicode转换格式utf-8编码数据。

在一种可能的实现方式中,所述预设编码规则包括:基于64个可打印字符来表示二进制数据base64编码规则。

在一种可能的实现方式中,所述原始字符串中包括:至少一个汉字字符。

在一种可能的实现方式中,所述获取待传输的原始字符串,包括:

采用预设的支持万维网web的计算机语言获取所述原始字符串。

第二方面,本申请实施例一种数据解码方法,包括:

接收终端发送的目标字符串;其中,所述目标字符串中所包括的字符均为可见字符;

按照预设解码规则对所述目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列;

对所述解码数据序列中的每个预设格式的解码数据进行转换,得到所述原始字符串中的每个对应字符。

在一种可能的实现方式中,所述预设解码规则包括:预设映射规则和预设解码子规则,所述按照预设解码规则对所述目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列,包括:

针对所述目标字符串中的每四个字符,分别根据所述预设映射规则得到所述四个字符对应的中间转换数据;

按照所述预设解码子规则对各所述四个字符对应的中间转换数据进行转换,得到与原始字符串对应的预设格式的解码数据序列。

在一种可能的实现方式中,所述预设解码规则还包括:预设字符替换规则,若所述目标字符串中包括第二预设字符,所述针对所述目标字符串中的每四个字符,分别根据所述预设映射规则得到所述四个字符对应的中间转换数据之前,所述方法还包括:

根据所述预设字符替换规则将所述目标字符串中所包括的第二预设字符替换为第一预设字符;

其中,所述第一预设字符为统一资源定位系统url参数中具有确定意义的字符,所述第二预设字符为所述url参数中不具有确定意义的字符。

在一种可能的实现方式中,所述预设格式的解码数据包括:采用8位统一码unicode转换格式utf-8解码数据。

在一种可能的实现方式中,所述预设解码规则包括:基于64个可打印字符来表示二进制数据base64解码规则。

在一种可能的实现方式中,所述原始字符串中包括:至少一个汉字字符。

第三方面,本申请实施例一种数据编码装置,包括:

获取模块,用于获取待传输的原始字符串;

第一转换模块,用于将所述原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到所述原始字符串对应的预设格式的编码数据序列;

第二转换模块,用于按照预设编码规则对所述编码数据序列进行转换,得到目标字符串;其中,所述目标字符串中所包括的字符均为可见字符;

发送模块,用于将所述目标字符串发送给服务器,以使所述服务器对所述目标字符串进行解码处理,以得到所述原始字符串。

在一种可能的实现方式中,所述第一转换模块具体用于:

针对所述原始字符串中的每个字符,分别根据第一预设函数确定所述字符对应的美国信息交换标准代码ascii值;

若所述字符对应的ascii值大于预设数值,则根据第二预设函数获取所述字符,并根据第三预设函数将所述字符转换为对应的预设格式的编码数据;或者,若所述字符对应的ascii值不大于所述预设数值,则将所述字符对应的ascii值转换为所述字符对应的预设格式的编码数据;

根据所述原始字符串中的每个字符对应的预设格式的编码数据,得到所述原始字符串对应的预设格式的编码数据序列。

在一种可能的实现方式中,所述预设编码规则包括:预设编码子规则和预设映射规则,所述第二转换模块具体用于:

针对所述编码数据序列中每三个字节所对应的预设格式的编码数据,分别按照所述预设编码子规则进行转换,得到中间转换数据;

根据所述预设映射规则得到各所述中间转换数据对应的目标转换数据;

根据各所述目标转换数据,得到所述目标字符串。

在一种可能的实现方式中,所述预设编码规则还包括:预设字符替换规则,若至少一个所述目标转换数据中包括第一预设字符,所述第二转换模块在根据各所述目标转换数据,得到所述目标字符串之前,还用于:

根据所述预设字符替换规则将所述至少一个目标转换数据中所包括的第一预设字符替换为第二预设字符;

其中,所述第一预设字符为统一资源定位系统url参数中具有确定意义的字符,所述第二预设字符为所述url参数中不具有确定意义的字符。

在一种可能的实现方式中,所述预设格式的编码数据包括:采用8位统一码unicode转换格式utf-8编码数据。

在一种可能的实现方式中,所述预设编码规则包括:基于64个可打印字符来表示二进制数据base64编码规则。

在一种可能的实现方式中,所述原始字符串中包括:至少一个汉字字符。

第四方面,本申请实施例一种数据解码装置,包括:

接收模块,用于接收终端发送的目标字符串;其中,所述目标字符串中所包括的字符均为可见字符;

第一转换模块,用于按照预设解码规则对所述目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列;

第二转换模块,用于对所述解码数据序列中的每个预设格式的解码数据进行转换,得到所述原始字符串中的每个对应字符。

在一种可能的实现方式中,所述预设解码规则包括:预设映射规则和预设解码子规则,所述第一转换模块具体用于:

针对所述目标字符串中的每四个字符,分别根据所述预设映射规则得到所述四个字符对应的中间转换数据;

按照所述预设解码子规则对各所述四个字符对应的中间转换数据进行转换,得到与原始字符串对应的预设格式的解码数据序列。

在一种可能的实现方式中,所述预设解码规则还包括:预设字符替换规则,若所述目标字符串中包括第二预设字符,所述第一转换模块还用于:

根据所述预设字符替换规则将所述目标字符串中所包括的第二预设字符替换为第一预设字符;

其中,所述第一预设字符为统一资源定位系统url参数中具有确定意义的字符,所述第二预设字符为所述url参数中不具有确定意义的字符。

在一种可能的实现方式中,所述预设格式的解码数据包括:采用8位统一码unicode转换格式utf-8解码数据。

在一种可能的实现方式中,所述预设解码规则包括:基于64个可打印字符来表示二进制数据base64解码规则。

在一种可能的实现方式中,所述原始字符串中包括:至少一个汉字字符。

第五方面,本申请实施例一种电子设备,包括:

处理器;以及

存储器,用于存储所述处理器的可执行指令;

其中,所述处理器配置为经由执行所述可执行指令来执行上述第一方面或第二方面的任意实现方式所述的方法。

第六方面,本申请实施例一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面或第二方面的任意实现方式所述的方法。

本申请实施例提供的数据编码方法、数据解码方法、装置、设备及存储介质,在获取到待传输的原始字符串后,通过将原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到原始字符串对应的预设格式的编码数据序列,并按照预设编码规则对所述编码数据序列进行转换,得到目标字符串,其中,目标字符串所包括的字符均为可见字符;进一步地,将目标字符串发送给服务器,以使服务器对目标字符串进行解码处理,以得到原始字符串。由于目标字符串所包括的字符均为可见字符,以便于服务器可以准确地识别目标字符串以进行解码处理,从而可以准确地识别出原始字符串,提高了数据传输效率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。

图1为本申请实施例提供的应用场景示意图;

图2为终端中的用户界面示意图;

图3为本申请实施例提供的数据编码方法的流程示意图;

图4为本申请实施例提供的数据解码方法的流程示意图;

图5为本申请实施例提供的数据编解码方法的流程示意图;

图6为本申请实施例提供的数据编码装置的结构示意图;

图7为本申请实施例提供的数据解码装置的结构示意图;

图8为本申请实施例提供的电子设备的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

图1为本申请实施例提供的应用场景示意图。如图1所示,应用场景示意图中可以包括:服务器和至少一个终端(为了便于描述,图1中以至少一个终端包括终端1和终端2为例进行示出)。当然,本申请实施例提供的应用场景示意图中还可以包括其它设备,本申请实施例中对此并不作限制。

本申请实施例中,终端会将获取到的待传输的原始字符串进行转换得到目标字符串,并将目标字符串发送给服务器,以使服务器对目标字符串进行解码处理,以得到原始字符串,其中,由于目标字符串中所包括的字符均为可见字符,从而服务器可以准确地识别出目标字符串以进行解码处理,进而准确地识别出原始字符串,解决了现有技术中服务器无法识别出哪些是汉字所导致的乱码问题。

本申请实施例中,执行数据编码方法的执行主体可以是终端,也可以是终端中的数据编码装置(需要说明的是,在本申请提供的实施例中以终端为例进行描述的)。

示例性地,本申请实施例中的终端或数据编码装置,可以通过软件和/或硬件实现。

本申请实施例中涉及的终端可以包括但不限于:手机和/或电脑,当然,还可以包括其它具有数据编码功能的设备。

本申请实施例中,执行数据解码方法的执行主体可以是服务器,也可以是服务器中的数据解码装置(需要说明的是,在本申请提供的实施例中以服务器为例进行描述的)。

现有计算机体系下,计算机内部全部以二进制或十六进制存储数据。通俗的讲,计算机内部,全是“数字”。如果计算机要显示英文,由于英文仅有26个字母,标点符号数量也不多,因此,使用一个字节(0-255)就可以将英文表示出来。

示例性地,美国信息交换标准代码(americanstandardcodeforinformationinterchange,ascii)编码,是现在最通用的“单字节”编码系统,用来显示英文和一些西欧语音。其中,在ascii编码规范中,48-57表示数字0-9,65-90表示字母a-z。

但由于常用的汉字有几千个,总汉字数达到几万个,一个字节只有256个字符,肯定无法对应所有汉字,只能用多字节解决。在目前的各类标准下,汉字编码规范有很多种,常见的有gbk、utf-8、unicode等。当采用不同的汉字编码规范时,同一个汉字可能对应不同的编码数据,例如“你”对应的gbk编码数据是c4e3、对应的utf-8编码数据是e4bda0、对应的unicode编码数据是4f60。

通常情况下,待传输的数据中可以包括英文、汉字和/或数字等,当采用不同的编解码规则时,英文和/或数字与汉字所占的字节数也可能不同。例如,当采用utf-8编解码规则时,一个英文占一个字节,一个汉字占三个字节;当采用unicode编解码规则或gbk编解码规则时,英文和汉字都占两个字节。

现有技术中的服务器从接收的数据流里面需要识别出哪些是汉字、哪些是英文、哪些是数字,但由于采用不同的编解码规则时,英文和/或数字与汉字所占的字节数可能不同,使得服务器常常会出现无法识别出哪些是汉字的情况,进而导致服务器生成乱码。

图2为终端中的用户界面示意图,如图2所示,当用户在“姓名”栏中输入姓名、“地址”栏中输入地址以及点击“提交”按钮时,终端会获取到待传输的数据,例如,“姓名”栏中所输入的姓名和“地址”栏中所输入的地址;其中,当用户输入的姓名和/或地址中存在汉字时,服务器可能无法正确识别出这些汉字,导致出现乱码。

下面以万维网(worldwideweb,web)系统为例,介绍一下可能会造成乱码的部分:

a、linux操作系统参数:web系统的java应用服务器,setlang语句可以更改语言参数;

b、java环境默认参数:例如“-ddefault.client.encoding=gbk,-duser.language=zh”;

c、java服务器页面(javaserverpages,jsp)的头:例如“<%@pagelanguage="java"pageencoding="gbk"%>”;

d、jsp的html头:例如“<metahttp-equiv="content-type"content="text/html;charset=gbk">”;

e、java代码获取参数:例如java代码里面string的getbytes方法可以获取指定格式的编码数据;

f、不同的应用框架可能还有涉及到国际化部分:例如会涉及不同的语言。

如果一个web系统出现了乱码,可能会与以上每个部分的设置有关系,导致排查乱码问题的工作量会非常大。

针对如图2所示的乱码问题,首先根据上述e部分所提到的java代码获取参数的方式,例如采用java代码里面getbytes方法尝试获取utf-8编码数据、gbk编码数据等,但结果均无效。

其次,根据上述c部分和d部分所提到的方法,再配合上述e部分所提到的方法,例如通过修改jsp的头和html头,再配合上述e部分所提到的java代码获取参数的方式,虽然花费了大量时间进行编码尝试,但仍然无效。

另外,考虑到可能由于jquery-mobile框架中的编码设置问题,但是由于jquery-mobile框架的源码太多,比较难找到修改的地方。

然后,考虑到可能由于java环境默认参数的问题,但是java环境默认参数会影响服务器上的多个应用程序,不能轻易修改。

最后,通过将待传输的原始字符串进行转换得到目标字符串(所包括的字符均为可见字符)的方式,以“可见字符”传输,代替原始的中文编码数据,从而服务器可以准确地识别出目标字符串以进行解码处理,进而准确地识别出原始字符串中的每个字符,解决了现有技术中服务器无法识别出哪些是汉字所导致的乱码问题。

下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。

图3为本申请实施例提供的数据编码方法的流程示意图。本申请实施例中以执行主体为终端为例,对数据编码方法的可实现方式进行介绍。如图3所示,本申请实施例的方法可以包括:

步骤301、获取待传输的原始字符串。

本步骤中,终端获取用户输入的待传输的原始字符串;其中,原始字符串中可以包括但不限于:数字字符、英文字符,和/或汉字字符。

示例性地,原始字符串中可以包括:至少一个汉字字符;当然,原始字符串中还可以包括其它类型的字符(例如数字字符和/或英文字符等)。

示例性地,用户输入原始字符串的方式可以包括但不限于:键盘输入方式、语音输入方式,或触控屏输入方式。

可选地,终端可以通过采用预设的支持万维网(worldwideweb,web)的计算机语言获取原始字符串。

例如,以javascript语言为例,可以采用如下代码获取原始字符串:

“varinsure_address=$('#address').val()”。

当然,还可通过其它方式获取原始字符串,本申请实施例中对此并不作限制。

步骤s302、将原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到原始字符串对应的预设格式的编码数据序列。

本步骤中,终端将上述步骤s301所获取的原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到原始字符串对应的预设格式的编码数据序列。

示例性地,预设格式的编码数据可以包括:utf-8编码数据,即终端可以将原始字符串中的每个字符分别转换为对应的utf-8编码数据,得到原始字符串对应的utf-8编码数据序列。可以理解,预设格式的编码数据还可以包括除utf-8编码数据之外的其它格式的编码数据,本申请实施例中对此不再赘述。

为了便于理解,本申请实施例的下述部分对上述转换过程的可实现方式进行介绍。

可选地,针对原始字符串中的每个字符,分别根据第一预设函数确定所述字符对应的ascii值。示例性地,第一预设函数可以包括但不限于:javascript语言中的charcodeat()函数;应理解,第一预设函数还可以包括具有确定字符对应的ascii值功能的其它函数,本申请实施例中不再赘述。

进一步地,若所述字符对应的ascii值大于预设数值,则根据第二预设函数获取所述字符,并根据第三预设函数将所述字符转换为对应的预设格式的编码数据;或者,若所述字符对应的ascii值不大于所述预设数值,则将所述字符对应的ascii值转换为所述字符对应的预设格式的编码数据。

示例性地,第二预设函数可以包括但不限于:javascript语言中的charat()函数;应理解,第二预设函数还可以包括具有获取字符功能的其它函数,本申请实施例中不再赘述。

示例性地,第三预设函数可以包括但不限于:javascript语言中的encodeuricomponent()函数;应理解,第三预设函数还可以包括具有将字符转换为预设格式的编码数据功能的其它函数,本申请实施例中不再赘述。

本申请实施例中,针对原始字符串中的每个字符,若所述字符对应的ascii值大于预设数值(例如127),则表明所述字符为汉字字符,从而终端可以根据第二预设函数获取所述字符,并根据第三预设函数将所述字符转换为对应的预设格式的编码数据(例如,utf-8编码数据)。或者,若所述字符对应的ascii值不大于所述预设数值,则表明所述字符为数字字符或英文字符,从而终端可以直接将所述字符对应的ascii值转换为预设进制的数据(例如十六进制数据),得到所述字符对应的预设格式的编码数据。

进一步地,根据原始字符串中的每个字符对应的预设格式的编码数据,得到原始字符串对应的预设格式的编码数据序列。

示例性地,终端可以将原始字符串中的每个字符对应的预设格式的编码数据进行拼接,便可得到原始字符串对应的预设格式的编码数据序列。

例如,假设原始字符串为“复兴门156号”,以预设格式的编码数据为utf-8编码数据为例,对原始字符串的转换过程进行介绍:

第一个字符“复”:通过调用charcodeat(0)函数得到第一个字符“复”对应的ascii值为22797,由于第一个字符“复”对应的ascii值大于127,则通过调用charat(0)函数获取到“复”这个字符,并通过调用encodeuricomponent("复")函数得到%e5%a4%8d,从而得到第一个字符“复”所对应的utf-8编码数据:e5a48d(过滤掉%)。

第二个字符“兴”和第三个字符“门”的转换过程可以参见上述第一个字符“复”的转换过程,最终得到第二个字符“兴”所对应的utf-8编码数据:e585b4,以及第三个字符“门”所对应的utf-8编码数据:e997a8。

第四个字符“1”:通过调用charcodeat(3)函数得到第四个字符“1”对应的ascii值为49,由于第四个字符“1”对应的ascii值不大于127,则直接将第四个字符“1”对应的ascii值转换为十六进制数据0x31,从而得到第四个字符“1”所对应的utf-8编码数据:31。

第五个字符“5”和第六个字符“6”的转换过程可以参见上述第四个字符“1”的转换过程,最终得到第五个字符“5”所对应的utf-8编码数据:35,以及第六个字符“6”所对应的utf-8编码数据:36。

第七个字符“号”的转换过程可以参见上述第一个字符“复”的转换过程,最终得到第七个字符“号”所对应的utf-8编码数据:e58fb7。

通过将原始字符串“复兴门156号”中的每个字符所对应的utf-8编码数据进行拼接,便得到原始字符串“复兴门156号”对应的utf-8编码数据序列:e5a48de585b4e997a8313536e58fb7。

步骤s303、按照预设编码规则对所述编码数据序列进行转换,得到目标字符串。

本步骤中,终端按照预设编码规则对上述步骤s302所得到的编码数据序列进行转换,得到目标字符串,其中,目标字符串所包括的字符均为可见字符,以便于将目标字符串(所包括的字符均为可见字符)发送给服务器,从而使得服务器可以准确地识别目标字符串以进行解码处理,进而准确地识别出原始字符串。

示例性地,预设编码规则可以包括但不限于:基于64个可打印字符来表示二进制数据(base64)编码规则。其中,base64编码规则可以实现将二进制数据转为可见字符。

为了便于理解,本申请实施例的下述部分对上述转换过程的可实现方式进行介绍。

可选地,本申请实施例中的预设编码规则可以包括:预设编码子规则和预设映射规则,针对所述编码数据序列中每三个字节所对应的预设格式的编码数据,分别按照所述预设编码子规则进行转换,得到中间转换数据。

示例性地,本申请实施例中的预设编码子规则可以包括但不限于:将三个字节的数据转换为二进制数据进行拼接(总计24位)得到序列;然后将序列分割成四组6位二进制数,并将每组二进制数的高位补0。

例如,以预设格式的编码数据为utf-8编码数据,原始字符串“复兴门156号”所对应的utf-8编码数据序列为:e5a48de585b4e997a8313536e58fb7为例,对预设编码子规则进行说明:

将前三个字节的数据(例如e5a48d)转换为二进制数据(例如111001011010010010001101)进行拼接得到序列(例如111001011010010010001101);然后将序列(例如111001011010010010001101)分割成四组6位二进制数(例如111001011010010010001101),并将四组二进制数的高位补0,得到四组8位二进制数(例如00111001000110100001001000001101),然后将四组8位二进制数分别转换为对应的十进制数据(例如57261813),得到了对应的中间转换数据。

其它字节的数据转换方式同上述前三个字节的数据转换方式,此处不再赘述。

示例性地,本申请实施例中对于任意三个字节所对应的预设格式的编码数据,按照预设编码子规则可以通过如下方式进行转换得到中间转换数据。

例如,设定ch1、ch2、ch3分别为三个字节所对应的预设格式的编码数据,enc1、enc2、enc3、enc4分别为转换后得到的4个字节的中间转换数据。

enc1=ch1>>2;//第一个字节的编码数据右移两位;

enc2=((ch1&0x03)<<4)|ch2>>4;//第一个字节的编码数据的右2位拼接第二个字节的编码数据的左4位;

enc3=((ch2&0xff)<<2)|(chr3>>6);//第二个字节的编码数据的后四位拼接第三个字节的编码数据的前两位;

enc4=ch3&0x3f;//保留第三个字节的编码数据的后六位。

当然,对于任意三个字节所对应的预设格式的编码数据,按照预设编码子规则还可以通过其它方式进行转换得到中间转换数据。

进一步地,根据预设映射规则得到各中间转换数据对应的目标转换数据。

示例性地,本申请实施例中的预设映射规则用于指示中间数据与对应的目标转换数据(可见字符)之间的对应关系。应理解,预设映射规则可以以表格形式存在,或者以序列形式存在,当然,预设映射规则还可以有其它存在形式。

例如,若预设映射规则以表格形式存在时,预设映射规则可以如表1所示;若预设映射规则以序列形式存在时,预设映射规则可以如“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/”所示。

表1为预设映射规则示意表

本申请实施例中,终端可以根据预设映射规则得到每个中间转换数据对应的目标转换数据,例如,中间转换数据“57”对应的目标转换数据为“5”、中间转换数据“26”对应的目标转换数据为“a”、中间转换数据“18”对应的目标转换数据为“s”,中间转换数据“13”对应的目标转换数据为“n”。

进一步地,根据各目标转换数据,得到目标字符串。

示例性地,终端在获取到每个中间转换数据对应的目标转换数据后,可以将每个目标转换数据进行拼接,便可得到目标字符串。

可选地,若上述预设格式的编码数据序列所包含的字节总数不是三的整数倍,在针对预设格式的编码数据序列中每三个字节所对应的预设格式的编码数据,分别按照预设编码子规则进行转换,得到中间转换数据之前,终端可以在所述预设格式的编码数据序列的末尾补零,使得补零后的编码数据序列所包含的字节总数是三的整数倍;对应地,终端需要在目标字符串的末尾补预设数量个第三预设字符。

例如,如果上述预设格式的编码数据序列所包含的字节总数不能被3整除,则终端可以在所述预设格式的编码数据序列的末尾补1个0x00,对应地,终端需要在目标字符串的末尾补1个第三预设字符(例如“=”);若终端在所述预设格式的编码数据序列的末尾补2个0x00,对应地,终端需要在目标字符串的末尾补2个第三预设字符(例如“=”)。

另外,考虑到目标数据中可能包括统一资源定位系统(uniformresourcelocator,url)参数中具有确定意义的字符(本申请实施例中称之为第一预设字符),为了保证数据传输的准确性,可选地,上述预设编码规则还可以包括:预设字符替换规则,若至少一个目标转换数据中包括第一预设字符(例如,字符“+”、字符“/”,和/或字符“=”),在根据各目标转换数据得到目标字符串之前,终端还可以根据预设字符替换规则将所述至少一个目标转换数据中所包括的第一预设字符替换为第二预设字符,其中,第二预设字符为所述url参数中不具有确定意义的字符。例如,终端可以根据预设字符替换规则将第一预设字符(例如字符“+”)替换为第二预设字符(例如字符“_”)、将第一预设字符(例如字符“/”)替换为第二预设字符(例如字符“-”),和/或将第一预设字符(例如字符“=”)替换为第二预设字符(例如字符“|”)。

步骤s304、将目标字符串发送给服务器,以使服务器对目标字符串进行解码处理,以得到原始字符串。

本步骤中,终端将上述步骤s303所得到的目标字符串发送给服务器,由于目标字符串所包括的字符均为可见字符,以便于服务器可以准确地识别目标字符串以进行解码处理,从而可以准确地识别出原始字符串。

本申请实施例中,在获取到待传输的原始字符串后,通过将原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到原始字符串对应的预设格式的编码数据序列,并按照预设编码规则对所述编码数据序列进行转换,得到目标字符串,其中,目标字符串所包括的字符均为可见字符;进一步地,将目标字符串发送给服务器,以使服务器对目标字符串进行解码处理,以得到原始字符串。由于目标字符串所包括的字符均为可见字符,以便于服务器可以准确地识别目标字符串以进行解码处理,从而可以准确地识别出原始字符串,提高了数据传输效率。

图4为本申请实施例提供的数据解码方法的流程示意图。在上述实例的基础上,本申请实施例中以执行主体为服务器为例,对数据解码方法的可实现方式进行介绍。如图4所示,本申请实施例的方法可以包括:

步骤s401、接收终端发送的目标字符串。

其中,目标字符串为:终端在将待传输的原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到原始字符串对应的预设格式的编码数据序列后,按照预设编码规则对所述编码数据序列进行转换得到的;其中,目标字符串中所包括的字符均为可见字符,以便于服务器可以准确地识别目标字符串。

具体的转换方式可以参考本申请上述实例中关于步骤s302和步骤s303中的相关描述,此处不再赘述。

本申请实施例中涉及的原始字符串中可以包括但不限于:数字字符、英文字符,和/或汉字字符。

示例性地,原始字符串中可以包括:至少一个汉字字符;当然,原始字符串中还可以包括其它类型的字符(例如数字字符和/或英文字符等)。

步骤s402、按照预设解码规则对目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列。

应理解,与原始字符串对应的预设格式的解码数据序列为与上述预设格式的编码数据序列对应的解码数据序列。

示例性地,上述预设格式的编码数据可以包括utf-8编码数据,预设格式的编码数据序列可以包括utf-8编码数据序列,对应的,预设格式的解码数据可以包括utf-8解码数据,预设格式的解码数据序列可以包括utf-8解码数据序列。

需要说明的是,上述预设格式的编码数据还可以包括除utf-8编码数据之外的其它格式的编码数据,对应的,预设格式的解码数据也可以包括除utf-8解码数据之外的其它格式的解码数据,本申请实施例中对此不再赘述。

一种可能的实现方式中,本申请实施例中的预设解码规则为上述步骤s303中涉及的预设编码规则所对应的解码规则。示例性地,预设解码规则可以包括但不限于:基于64个可打印字符来表示二进制数据(base64)解码规则。

可选地,若预设解码规则包括:预设映射规则和预设解码子规则,针对目标字符串中的每四个字符,分别根据预设映射规则得到所述四个字符对应的中间转换数据。

本申请实施例中的预设映射规则可以参考上述步骤s303中的相关内容,此处不再赘述。

例如,假设目标字符串为“5asn5yw06zeomtu25y+3”,则可以将目标字符串中的每四个字符划分为一组,得到“5asn”、“5yw0”、“6zeo”、“mtu2”、“5y+3”共五组,以目标字符串中的前四个字符“5asn”为例,服务器可以根据预设映射规则得到所述四个字符对应的中间转换数据分别为:“57”、“26”、“18”、“13”。

进一步地,按照预设解码子规则对各所述四个字符对应的中间转换数据进行转换,得到与原始字符串对应的预设格式的解码数据序列。

本申请实施例中的预设解码子规则为上述步骤s303中涉及的预设编码子规则所对应的解码子规则。示例性地,预设解码子规则可以包括但不限于:将4个中间转换数据进行解码得到对应的三个字节的数据。

例如,以4个中间转换数据“57261913”为例,对预设解码子规则进行说明:

将4个中间转换数据(例如57261913)转换为四组8位二进制数(例如00111001000110100001001000001101),并将每组8位二进制数的高两位的0去除掉,得到四组6位二进制数(例如111001011010010010001101);进一步地,将四组6位二进制数进行拼接得到序列(例如111001011010010010001101),并将序列分割成三组8位二进制数据(例如111001011010010010001101);然后将三组8位二进制数据分别转换为对应的十六进制数据(例如e5a48d)。

应理解,将各所述四个字符对应的中间转换数据进行转换所得到的三个字节的数据进行拼接,便可得到与原始字符串对应的预设格式的解码数据序列。

可选地,上述预设解码规则还包括:预设字符替换规则,若目标字符串中包括第二预设字符,服务器在针对目标字符串中的每四个字符,分别根据预设映射规则得到所述四个字符对应的中间转换数据之前,还可以根据预设字符替换规则将目标字符串中所包括的第二预设字符替换为第一预设字符。其中,第一预设字符为url参数中具有确定意义的字符(例如,字符“+”、字符“/”,和/或字符“=”),第二预设字符为所述url参数中不具有确定意义的字符(例如,字符“_”、字符“-”,和/或字符“|”)。

例如,服务器可以根据预设字符替换规则将第二预设字符(例如字符“_”)替换为第一预设字符(例如字符“+”)、将第二预设字符(例如字符“-”)替换为第一预设字符(例如字符“/”),和/或将第二预设字符(例如字符“|”)替换为第一预设字符(例如字符“=”)。

另外,如果服务器在根据预设字符替换规则将目标字符串中所包括的第二预设字符替换为第一预设字符之后所得到的目标字符串中包括预设数量个第三预设字符(例如“=”),则服务器将各所述四个字符对应的中间转换数据进行转换所得到的三个字节的数据进行拼接时,需要去除掉末尾预设数量个字节的零。

例如,如果服务器在根据预设字符替换规则将目标字符串中所包括的第二预设字符替换为第一预设字符之后所得到的目标字符串中包括1个第三预设字符(例如“=”),则服务器将各所述四个字符对应的中间转换数据进行转换所得到的三个字节的数据进行拼接时,需要去除掉末尾的1个0x00;如果服务器在根据预设字符替换规则将目标字符串中所包括的第二预设字符替换为第一预设字符之后所得到的目标字符串中包括2个第三预设字符(例如“=”),则服务器将各所述四个字符对应的中间转换数据进行转换所得到的三个字节的数据进行拼接时,需要去除掉末尾的2个0x00。

另一种可能的实现方式中,本申请实施例中涉及的预设解码规则可以为第一预设解码函数。示例性地,第一预设解码函数可以包括但不限于:javascript语言中sun.misc类的base64decoder函数。

本申请实施例中,服务器可以根据第一预设解码函数对目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列。

例如,服务器可以通过如下代码实现对目标字符串的转换,便可将所得到预设格式的解码数据序列(例如e5a48de585b4e997a8313536e58fb7)存储到textbyte字节数组中:

“base64decoderdecoder=newbase64decoder();

byte[]textbyte=decoder.decode("5asn5yw06zeomtu25y+3")”。

应理解,第一预设解码函数还可以包括具有解码功能的其它函数,本申请实施例中不再赘述。

可选地,若目标字符串中包括第二预设字符,服务器在根据第一预设解码函数对目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列之前,还可以根据预设字符替换规则将目标字符串中所包括的第二预设字符替换为第一预设字符。其中,第一预设字符为url参数中具有确定意义的字符(例如,字符“+”、字符“/”,和/或字符“=”),第二预设字符为所述url参数中不具有确定意义的字符(例如,字符“_”、字符“-”,和/或字符“|”)。

例如,服务器可以根据预设字符替换规则将第二预设字符(例如字符“_”)替换为第一预设字符(例如字符“+”)、将第二预设字符(例如字符“-”)替换为第一预设字符(例如字符“/”),和/或将第二预设字符(例如字符“|”)替换为第一预设字符(例如字符“=”)。

另外,如果服务器在根据预设字符替换规则将目标字符串中所包括的第二预设字符替换为第一预设字符之后所得到的目标字符串中包括预设数量个第三预设字符(例如“=”),则服务器可以在根据第一预设解码函数对目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列之前,去除掉目标字符串中所包括第三预设字符,或者,服务器可以根据第一预设解码函数对目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列之后,去除掉末尾预设数量个字节的零,从而得到所述预设格式的解码数据序列。

例如,如果服务器在根据预设字符替换规则将目标字符串中所包括的第二预设字符替换为第一预设字符之后所得到的目标字符串中包括1个第三预设字符(例如“=”),则服务器可以根据第一预设解码函数对目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列之后,需要去除掉末尾的1个0x00;如果服务器在根据预设字符替换规则将目标字符串中所包括的第二预设字符替换为第一预设字符之后所得到的目标字符串中包括2个第三预设字符(例如“=”),则服务器可以根据第一预设解码函数对目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列之后,需要去除掉末尾的2个0x00。

步骤s403、对解码数据序列中的每个预设格式的解码数据进行转换,得到原始字符串中的每个对应字符。

本步骤中,服务器可以根据第二预设解码函数对解码数据序列中的每个预设格式的解码数据进行转换,得到原始字符串中的每个对应字符,从而得到原始字符串。

示例性地,第二预设解码函数可以包括但不限于:javascript语言中的string()函数。

例如,服务器可以通过如下代码实现对解码数据序列中的每个预设格式的解码数据的转换,便可得到原始字符串(例如复兴门156号):

“stringstr1=newstring(textbyte,"utf-8")”。

应理解,第二预设解码函数还可以包括具有解码功能的其它函数,本申请实施例中不再赘述。

本申请实施例中,在接收到终端发送的目标字符串后,按照预设解码规则对目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列,其中,目标字符串所包括的字符均为可见字符;进一步地,对解码数据序列中的每个预设格式的解码数据进行转换,得到原始字符串中的每个对应字符,从而得到原始字符串。由于目标字符串所包括的字符均为可见字符,服务器可以准确地识别目标字符串以进行解码处理,从而可以准确地识别出原始字符串,提高了数据传输效率。

图5为本申请实施例提供的数据编解码方法的流程示意图。在上述实例的基础上,本申请实施例结合终端侧和服务器侧对数据编解码方法进行介绍。如图5所示,本申请实施例的方法可以包括:

步骤s501、终端获取待传输的原始字符串。

具体的实现方式可以参考本申请上述步骤s301中的相关内容,本申请实施例中对此不再赘述。

步骤s502、终端将原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到原始字符串对应的预设格式的编码数据序列。

具体的实现方式可以参考本申请上述步骤s302中的相关内容,本申请实施例中对此不再赘述。

步骤s503、终端按照预设编码规则对所述编码数据序列进行转换,得到目标字符串。

具体的实现方式可以参考本申请上述步骤s303中的相关内容,本申请实施例中对此不再赘述。

步骤s504、终端将目标字符串发送给服务器。

示例性地,目标字符串所包括的字符均为可见字符,以便于服务器可以准确地识别目标字符串以进行解码处理,进而准确地识别出原始字符串。

步骤s505、服务器接收终端发送的目标字符串。

其中,目标字符串为:终端在将待传输的原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到原始字符串对应的预设格式的编码数据序列后,按照预设编码规则对所述编码数据序列进行转换得到的。

步骤s506、服务器按照预设解码规则对目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列。

具体的实现方式可以参考本申请上述步骤s402中的相关内容,本申请实施例中对此不再赘述。

步骤s507、服务器对解码数据序列中的每个预设格式的解码数据进行转换,得到原始字符串中的每个对应字符。

具体的实现方式可以参考本申请上述步骤s403中的相关内容,本申请实施例中对此不再赘述。

本申请实施例中,终端在获取到待传输的原始字符串后,通过将原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到原始字符串对应的预设格式的编码数据序列,并按照预设编码规则对所述编码数据序列进行转换,得到目标字符串,其中,目标字符串所包括的字符均为可见字符;进一步地,终端将目标字符串发送给服务器,由于目标字符串所包括的字符均为可见字符,以便于服务器可以准确地识别目标字符串以进行解码处理,从而可以准确地识别出原始字符串,提高了数据传输效率。

图6为本申请实施例提供的数据编码装置的结构示意图。可选地,本实施例提供的数据编码装置可以为终端中的装置。如图6所示,本申请实施例提供的数据编码装置60可以包括:获取模块601、第一转换模块602、第二转换模块603和发送模块604。

其中,获取模块601,用于获取待传输的原始字符串;

第一转换模块602,用于将所述原始字符串中的每个字符分别转换为对应的预设格式的编码数据,得到所述原始字符串对应的预设格式的编码数据序列;

第二转换模块603,用于按照预设编码规则对所述编码数据序列进行转换,得到目标字符串;其中,所述目标字符串中所包括的字符均为可见字符;

发送模块604,用于将所述目标字符串发送给服务器,以使所述服务器对所述目标字符串进行解码处理,以得到所述原始字符串。

在一种可能的实现方式中,所述第一转换模块602具体用于:

针对所述原始字符串中的每个字符,分别根据第一预设函数确定所述字符对应的美国信息交换标准代码ascii值;

若所述字符对应的ascii值大于预设数值,则根据第二预设函数获取所述字符,并根据第三预设函数将所述字符转换为对应的预设格式的编码数据;或者,若所述字符对应的ascii值不大于所述预设数值,则将所述字符对应的ascii值转换为所述字符对应的预设格式的编码数据;

根据所述原始字符串中的每个字符对应的预设格式的编码数据,得到所述原始字符串对应的预设格式的编码数据序列。

在一种可能的实现方式中,所述预设编码规则包括:预设编码子规则和预设映射规则,所述第二转换模块603具体用于:

针对所述编码数据序列中每三个字节所对应的预设格式的编码数据,分别按照所述预设编码子规则进行转换,得到中间转换数据;

根据所述预设映射规则得到各所述中间转换数据对应的目标转换数据;

根据各所述目标转换数据,得到所述目标字符串。

在一种可能的实现方式中,所述预设编码规则还包括:预设字符替换规则,若至少一个所述目标转换数据中包括第一预设字符,所述第二转换模块603在根据各所述目标转换数据,得到所述目标字符串之前,还用于:

根据所述预设字符替换规则将所述至少一个目标转换数据中所包括的第一预设字符替换为第二预设字符;

其中,所述第一预设字符为统一资源定位系统url参数中具有确定意义的字符,所述第二预设字符为所述url参数中不具有确定意义的字符。

在一种可能的实现方式中,所述预设格式的编码数据包括:采用8位统一码unicode转换格式utf-8编码数据。

在一种可能的实现方式中,所述预设编码规则包括:基于64个可打印字符来表示二进制数据base64编码规则。

在一种可能的实现方式中,所述原始字符串中包括:至少一个汉字字符。

本实施例提供的数据编码装置,可以用于执行本申请上述数据编码方法实施例中关于终端的技术方案,其实现原理和技术效果类似,此处不再赘述。

图7为本申请实施例提供的数据解码装置的结构示意图。可选地,本实施例提供的数据解码装置可以为服务器中的装置。如图7所示,本申请实施例提供的数据解码装置70可以包括:接收模块701、第一转换模块702和第二转换模块703。

其中,接收模块701,用于接收终端发送的目标字符串;其中,所述目标字符串中所包括的字符均为可见字符;

第一转换模块702,用于按照预设解码规则对所述目标字符串进行转换,得到与原始字符串对应的预设格式的解码数据序列;

第二转换模块703,用于对所述解码数据序列中的每个预设格式的解码数据进行转换,得到所述原始字符串中的每个对应字符。

在一种可能的实现方式中,所述预设解码规则包括:预设映射规则和预设解码子规则,所述第一转换模块702具体用于:

针对所述目标字符串中的每四个字符,分别根据所述预设映射规则得到所述四个字符对应的中间转换数据;

按照所述预设解码子规则对各所述四个字符对应的中间转换数据进行转换,得到与原始字符串对应的预设格式的解码数据序列。

在一种可能的实现方式中,所述预设解码规则还包括:预设字符替换规则,若所述目标字符串中包括第二预设字符,所述第一转换模块702还用于:

根据所述预设字符替换规则将所述目标字符串中所包括的第二预设字符替换为第一预设字符;

其中,所述第一预设字符为统一资源定位系统url参数中具有确定意义的字符,所述第二预设字符为所述url参数中不具有确定意义的字符。

在一种可能的实现方式中,所述预设格式的解码数据包括:采用8位统一码unicode转换格式utf-8解码数据。

在一种可能的实现方式中,所述预设解码规则包括:基于64个可打印字符来表示二进制数据base64解码规则。

在一种可能的实现方式中,所述原始字符串中包括:至少一个汉字字符。

本实施例提供的数据解码装置,可以用于执行本申请上述数据解码方法实施例中关于服务器的技术方案,其实现原理和技术效果类似,此处不再赘述。

图8为本申请实施例提供的电子设备的结构示意图。本申请实施例中的电子设备可以包括但不限于:终端或者服务器。

如图8所示,本申请实施例提供的电子设备80可以包括:处理器801以及存储器802。可选地,所述电子设备80还可以包括收发器803,所述收发器803用于和其他设备通信。

其中,所述存储器802,用于存储所述处理器801的可执行指令;所述处理器801配置为经由执行所述可执行指令来执行本申请上述数据编码方法实施例中关于终端的技术方案,或者本申请上述数据解码方法实施例中关于服务器的技术方案,其实现原理和技术效果类似,此处不再赘述。

应理解,当本申请实施例中的电子设备包括终端时,所述处理器801配置为经由执行所述可执行指令来执行本申请上述数据编码方法实施例中关于终端的技术方案;当本申请实施例中的电子设备包括服务器时,所述处理器801配置为经由执行所述可执行指令来执行本申请上述数据解码方法实施例中关于服务器的技术方案。

本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本申请上述数据编码方法实施例中关于终端的技术方案,或本申请上述数据解码方法实施例中关于服务器的技术方案,其实现原理和技术效果类似,此处不再赘述。

本领域普通技术人员可以理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:只读存储器(英文:read-onlymemory,缩写:rom)、ram、快闪存储器、硬盘、固态硬盘、磁带(英文:magnetictape)、软盘(英文:floppydisk)、光盘(英文:opticaldisc)及其任意组合。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1