CN112200286B - 字符串编码的方法和装置 - Google Patents
字符串编码的方法和装置 Download PDFInfo
- Publication number
- CN112200286B CN112200286B CN202010861273.0A CN202010861273A CN112200286B CN 112200286 B CN112200286 B CN 112200286B CN 202010861273 A CN202010861273 A CN 202010861273A CN 112200286 B CN112200286 B CN 112200286B
- Authority
- CN
- China
- Prior art keywords
- character string
- length
- segment
- character
- dividing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K19/00—Record carriers for use with machines and with at least a part designed to carry digital markings
- G06K19/06—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
- G06K19/06009—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking
- G06K19/06037—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking multi-dimensional coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/126—Character encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K19/00—Record carriers for use with machines and with at least a part designed to carry digital markings
- G06K19/06—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
- G06K19/06009—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking
- G06K19/06046—Constructional details
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- General Engineering & Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提供一种字符串编码的方法和装置。该方法包括:通过将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段,针对每个字符串分段,根据字符串分段对应的分隔长度将字符串划分得到至少一个字符串子分段,针对字符串分段对应的每个分隔长度,根据分隔长度划分得到的字符串子分段,得到分隔长度下的第一编码结果,其中,第一编码结果包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值,根据字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定字符串分段的第二编码结果,根据各字符串分段的第二编码结果,得到待编码字符串的编码结果。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种字符串编码的方法和装置。
背景技术
二维码又称二维条码,比传统的条形码Bar Code能存更多的信息,也能表示更多的数据类型,目前已经应用到支付,信息获取,防伪溯源等多个领域中。
现有的二维码技术有快速响应码(Quick Response Code,简称QR Code)、堆叠式二维条码PDF417等,现有的二维码技术可以针对中文、英文等语言的字符进行编码。
然而,现有的二维码技术都无法对涵盖多种语言文字的统一码Unicode进行编码。
发明内容
本发明提供一种字符串编码的方法和装置,用以解决现有的二维码技术都无法对涵盖多种语言文字的Unicode进行编码的问题。
第一方面,本发明提供一种字符串编码的方法,包括:
将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段,其中,在后字符串分段的长度小于相邻的在前字符串分段的字节数;
针对每个字符串分段,根据所述字符串分段对应的分隔长度将所述字符串划分得到至少一个字符串子分段,其中,所述字符串分段对应的分隔长度与所述字符串分段的长度关联,所述字符串分段对应的分隔长度为一个或者多个;
针对所述字符串分段对应的每个分隔长度,根据所述分隔长度划分得到的字符串子分段,得到所述分隔长度下的第一编码结果,其中,所述第一编码结果包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值;
根据所述字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定所述字符串分段的第二编码结果;
根据各所述字符串分段的第二编码结果,得到所述待编码字符串的编码结果。
可选的,所述根据各字符串分段的第二编码结果,得到所述待编码字符串的编码结果,包括:
当各字符串分段的第二编码结果中两个相邻字符串分段的第二编码结果使用相同的分隔长度得到时,将所述两个相邻字符串分段合并,得到合并字符串;
对所述合并字符串按照所述相同的分隔长度进行划分,得到至少一个字符串子分段;
根据所述相同的分隔长度划分得到的字符串子分段,得到所述合并字符串的编码结果,其中,所述合并字符串的编码结果包括所述相同的分隔长度划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值;
根据所述合并字符串的编码结果的字符长度和所述两个相邻字符串分段的第二编码结果的总字符长度,确定所述两个相邻字符串分段的编码结果。
可选的,所述根据所述合并字符串的编码结果的字符长度和所述两个相邻字符串分段的第二编码结果的总字符长度,确定所述两个相邻字符串分段的编码结果,包括:
若所述合并字符串的编码结果的字符长度大于等于所述两个相邻字符串分段的第二编码结果的总字符长度,所述两个相邻字符串分段的编码结果为两个相邻字符串分段的第二编码结果;
若所述合并字符串的编码结果的字符长度小于所述两个相邻字符串分段的第二编码结果的总字符长度,所述两个相邻字符串分段的编码结果为所述合并字符串的编码结果。
可选的,所述将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段,包括:
使用预设步长集合将待编码字符串按照从前往后的顺序进行划分,其中,所述预设步长集合中包括第一预设步长、第二预设步长和第三预设步长,所述第一预设步长大于所述第二预设步长,所述第二预设步长大于所述第三预设步长;
使用预设步长集合将待编码字符串按照从前往后的顺序进行划分,包括:当所述待编码字符串的长度大于等于所述第一预设步长时,使用所述第一预设步长对所述待编码字符串按照从前往后的顺序进行划分,直至剩余未分段字符串小于所述第一预设步长时停止使用所述第一预设步长进行划分;
当剩余未分段字符串小于所述第一预设步长且大于等于所述第二预设步长时,使用所述第二预设步长对剩余未分段字符串进行划分,直至剩余未分段字符串小于所述第二预设步长时停止使用所述第二预设步长进行划分;
当剩余未分段字符串小于所述第二预设步长且大于等于所述第三预设步长时,使用所述第三预设步长对剩余未分段字符串进行划分,直至剩余未分段字符串小于所述第三预设步长时停止使用所述第三预设步长进行划分;
当剩余未分段字符串小于所述第三预设步长时,将剩余未分段字符串分成一段。
可选的,所述第一预设步长为12字节,第二预设步长为9字节,所述第三预设步长为6字节,所述针对每个字符串分段,根据所述字符串分段对应的分隔长度将所述字符串划分得到至少一个字符串子分段,包括:
针对每个字符串分段,若所述字符串分段为12字节,分别按照分隔长度为1字节、2字节、3字节和4字节对所述字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若所述字符串分段为9字节,分别按照分隔长度为1字节和3字节对所述字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若所述字符串分段为6字节,分别按照分隔长度为1字节和2字节对所述字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若所述字符串分段小于6字节,按照分隔长度为1字节对所述字符串分段进行划分,得到所述分隔长度对应的字符串子分段。
可选的,所述根据所述字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定所述字符串分段的第二编码结果,包括:
比较各分隔长度下的所述第一编码结果的字符长度,所述字符串分段的第二编码结果为所述第一编码结果的字符长度最小的所述分隔长度下的第一编码结果。
可选的,所述第一编码结果还包括分隔长度标识符,字符串子分段的数量和字符串子分段的长度。
可选的,所述待编码字符串为万国码Unicode的二进制格式的字符串,所述Unicode的二进制格式包括以下任一一种编码格式:UTF8、UTF16BE、UTF16LE、UTF32BE、UTF32LE;
所述将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段之前,还包括:
将万国码unicode格式的字符串转换成相应的待编码字符串。
第二方面,本发明提供一种字符串编码的装置,包括:
第一划分模块,用于将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段,其中,在后字符串分段的长度小于相邻的在前字符串分段的字节数;
第二划分模块,用于针对每个字符串分段,根据所述字符串分段对应的分隔长度将所述字符串划分得到至少一个字符串子分段,其中,所述字符串分段对应的分隔长度与所述字符串分段的长度关联,所述字符串分段对应的分隔长度为一个或者多个;
第一得到模块,用于针对所述字符串分段对应的每个分隔长度,根据所述分隔长度划分得到的字符串子分段,得到所述分隔长度下的第一编码结果,其中,所述第一编码结果包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值;
第一确定模块,用于根据所述字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定所述字符串分段的第二编码结果;
第二得到模块,用于根据各所述字符串分段的第二编码结果,得到所述待编码字符串的编码结果。
可选的,所述第二得到模块包括:
合并模块,用于当各字符串分段的第二编码结果中两个相邻字符串分段的第二编码结果使用相同的分隔长度得到时,将所述两个相邻字符串分段合并,得到合并字符串;
第三划分模块,用于对所述合并字符串按照所述相同的分隔长度进行划分,得到至少一个字符串子分段;
第三得到模块,用于根据所述相同的分隔长度划分得到的字符串子分段,得到所述合并字符串的编码结果,其中,所述合并字符串的编码结果包括所述相同的分隔长度划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值;
第二确定模块,用于根据所述合并字符串的编码结果的字符长度和所述两个相邻字符串分段的第二编码结果的总字符长度,确定所述两个相邻字符串分段的编码结果。
可选的,所述第二确定模块具体用于:
若所述合并字符串的编码结果的字符长度大于等于所述两个相邻字符串分段的第二编码结果的总字符长度,所述两个相邻字符串分段的编码结果为两个相邻字符串分段的第二编码结果;
若所述合并字符串的编码结果的字符长度小于所述两个相邻字符串分段的第二编码结果的总字符长度,所述两个相邻字符串分段的编码结果为所述合并字符串的编码结果。
可选的,所述第一划分模块具体用于:
使用预设步长集合将待编码字符串按照从前往后的顺序进行划分,其中,所述预设步长集合中包括第一预设步长、第二预设步长和第三预设步长,所述第一预设步长大于所述第二预设步长,所述第二预设步长大于所述第三预设步长;
使用预设步长集合将待编码字符串按照从前往后的顺序进行划分,包括:当所述待编码字符串的长度大于等于所述第一预设步长时,使用所述第一预设步长对所述待编码字符串按照从前往后的顺序进行划分,直至剩余未分段字符串小于所述第一预设步长时停止使用所述第一预设步长进行划分;
当剩余未分段字符串小于所述第一预设步长且大于等于所述第二预设步长时,使用所述第二预设步长对剩余未分段字符串进行划分,直至剩余未分段字符串小于所述第二预设步长时停止使用所述第二预设步长进行划分;
当剩余未分段字符串小于所述第二预设步长且大于等于所述第三预设步长时,使用所述第三预设步长对剩余未分段字符串进行划分,直至剩余未分段字符串小于所述第三预设步长时停止使用所述第三预设步长进行划分;
当剩余未分段字符串小于所述第三预设步长时,将剩余未分段字符串分成一段。
可选的,所述第一预设步长为12字节,第二预设步长为9字节,所述第三预设步长为6字节,所述第二划分模块具体用于:
针对每个字符串分段,若所述字符串分段为12字节,分别按照分隔长度为1字节、2字节、3字节和4字节对所述字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若所述字符串分段为9字节,分别按照分隔长度为1字节和3字节对所述字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若所述字符串分段为6字节,分别按照分隔长度为1字节和2字节对所述字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若所述字符串分段小于6字节,按照分隔长度为1字节对所述字符串分段进行划分,得到所述分隔长度对应的字符串子分段。
可选的,所述第一确定模块具体用于:
比较各分隔长度下的所述第一编码结果的字符长度,所述字符串分段的第二编码结果为所述第一编码结果的字符长度最小的所述分隔长度下的第一编码结果。
可选的,所述第一编码结果还包括分隔长度标识符,字符串子分段的数量和字符串子分段的长度。
可选的,所述待编码字符串为万国码Unicode的二进制格式的字符串,所述Unicode的二进制格式包括以下任一一种编码格式:UTF8、UTF16BE、UTF16LE、UTF32BE、UTF32LE;
所述装置还包括:
转换模块,用于将万国码unicode格式的字符串转换成对应的待编码字符串。
第三方面,本发明提供一种字符串编码的设备,包括:
存储器,用于存储处理器可执行指令的存储器;
处理器,用于在计算机程序被执行时,执行如上述第一方面所述的方法的指令。
第四方面,本发明提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上述第一方面所述的字符串编码的方法。
本发明提供的字符串编码的方法和装置,通过将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段,其中,在后字符串分段的长度小于相邻的在前字符串分段的字节数,针对每个字符串分段,根据字符串分段对应的分隔长度将字符串划分得到至少一个字符串子分段,其中,字符串分段对应的分隔长度与字符串分段的长度关联,字符串分段对应的分隔长度为一个或者多个,针对字符串分段对应的每个分隔长度,根据分隔长度划分得到的字符串子分段,得到分隔长度下的第一编码结果,其中,第一编码结果包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值,根据字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定字符串分段的第二编码结果,根据各字符串分段的第二编码结果,得到待编码字符串的编码结果。对待编码字符串进行划分,并按照不同的分隔长度进行再划分,从而计算不同分隔长度下的第一编码结果,第一编码结果中包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值,不存储原始数据,而是存储一个差值,能够有效缩减第一编码结果的长度,节省存储空间,并且,根据字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定字符串分段的第二编码结果,从而通过取不同分隔长度下的第一编码结果中长度最短的作为字符串分段的第二编码结果,使得第二编码结果的长度进一步缩减,进一步节省存储空间,根据各字符串分段的第二编码结果,得到待编码字符串的编码结果,从而实现了对Unicode字符串的编码,进而能够将Unicode能够表示的语言信息通过编码存储在二维码中,进行信息的传播。
附图说明
图1为本发明提供的一种字符串编码的方法的流程示意图;
图2为本发明提供的另一种字符串编码的方法的流程示意图;
图3为本发明提供的再一种字符串编码的方法的流程示意图;
图4A为对一组罗马数字进行编码的示意图;
图4B为一种编码结果的格式示意图;
图5为本发明提供的一种字符串编码的装置的结构示意图;
图6为本发明提供一种字符串编码的设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
首先对本发明所涉及的名词进行解释:
统一码:也叫万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
Unicode转换格式(Unicode Transformation Format,简称UTF):是指将Unicode通过相应的转换规则转换成的一种格式,UTF格式有:7位元UTF-7,7.5位元UTF-7.5,8位元UTF-8,16位元UTF-16,和32位元UTF-32等。
UTF-8:是指针对Unicode的一种可变长度字符模式,是Unicode的一种转换格式。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节与美国信息交换标准代码(American Standard Code for Information Interchange,简称ASCII)相容,使得原来处理ASCII字符的软件无须或只进行少部份修改后,便可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的模式。
模式指示符:是指在任何编码模式不唯一的码制中,区别各种模式的模式指示符。模式指示符分为“模式启始符(也叫做前导码)”和“模式终止符”,模式指示符用来标识模式的开始和结束。类似于打电话时,开始时先说“你好”,结束时说“再见”一样。
二维条码/二维码(2-dimensional bar code):是指用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理。
随着二维码的应用越来越普遍,已经出现了多种二维码技术,例如QR码、PDF417等,这些二维码技术可以针对中文、英文、日文等应用范围广的语言的字符文字进行编码,从而将该种语言文字的信息存储在二维码中。然而,现有的二维码技术都无法对涵盖多种语言文字的Unicode进行编码。
本发明提供的字符串编码的方法,旨在解决现有技术的如上技术问题,通过对待编码字符串进行划分,对每个字符串分段单独进行编码,按照不同的分隔长度进行再划分,从而计算不同分隔长度下的第一编码结果,第一编码结果中包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值,不存储原始数据,而是存储一个差值,能够有效缩减第一编码结果的长度,节省存储空间,并且,根据字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定字符串分段的第二编码结果,从而通过取不同分隔长度下的第一编码结果中长度最短的作为字符串分段的第二编码结果,使得第二编码结果的长度进一步缩减,进一步节省存储空间,根据各字符串分段的第二编码结果,得到待编码字符串的编码结果,从而实现了对Unicode字符串的编码,进而能够将Unicode能够表示的语言信息通过编码存储在二维码中,进行信息的传播。
本发明具体的应用场景为:在支付,溯源等多种场景下,需要使用二维码存储信息,如果该信息为使用unicode编码表示的语言或者符号信息,则在生成二维码的过程中,需要先对该信息按照预设的编码规则进行编码,得到编码结果,然后将该编码结果转换为二维码,也即将该信息存储到二维码中。用户使用移动终端进行扫描该二维码时,移动终端对该二维码按照与预设的编码规则对应的解码规则进行解码,得到解码结果,该解码结果即为该二维码所存储的信息,移动终端显示出该二维码所存储的信息,用户即可知道该二维码中所携带的信息,从而达到信息传播的目的。
下面以具体地实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
图1为本发明提供的一种字符串编码的方法的流程示意图,如图1所示,本实施例的方法由终端设备执行,终端设备可以是计算机,平板设备,手机等,在此本发明不做限制,本实施例的方法如下:
S101、将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段。
其中,在后字符串分段的长度小于相邻的在前字符串分段的字节数;
将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段。其中,可以设置预设步长,预设步长可以表示设置的字节长度,预设步长可以为12字节,24字节或者48字节等长度,对此本发明不做限定。例如,设置预设步长为12字节,则对待编码字符串按照从前到后的顺序,每12字节为一段进行分段,若有不足12字节的未分段部分,可以将未分段部分分成一段,也可以设置多种其他预设步长,将未分段部分按照其他预设步长继续分段。
可选的,待编码字符串为Unicode的一种转换格式,该转换格式是将Unicode的二进制格式,可以为UTF的多种格式中的一种,例如,待编码字符串可以为UTF-8、UTF-16、UTF-32等格式。
在对待编码字符串进行S101步骤处理之前,还包括S100:
S100、将Unicode的字符串转换成对应的待编码字符串。
Unicode上面每个字符都有一个“U+”开头的编号,例如:U+4E25为汉字“严”字,为了便于信息的编码,可以先将该Unicode信息转换成UTF格式的待编码字符串。
S102、针对每个字符串分段,根据字符串分段对应的分隔长度将字符串划分得到至少一个字符串子分段。
其中,字符串分段对应的分隔长度与字符串分段的长度关联,字符串分段对应的分隔长度为一个或者多个。
通过步骤S101对待编码字符串划分成字符串分段以后,针对每个字符串分段单独进行编码,其中,可以预先设置不同长度的字符串分段对应的一个或者多个分隔长度。针对每个字符串分段,分别按照分隔长度进行划分,得到每个分隔长度下的字符串子分段。
例如,字符串分段为12字节,12字节对应的分隔长度为1字节、2字节、3字节和4字节,则分别按照1字节、2字节、3字节或者4字节对该12字节的字符串分段进行划分,分别得到了1字节下的12个字符串子分段、2字节下的6个字符串子分段、3字节下的4个字符串分段和4字节下的3个字符串分段。
再例如,字符串分段为24字节,24字节对应的分隔长度可以为1字节、2字节、3字节、4字节、6字节和8字节,则分别按照1字节、2字节、3字节、4字节、6字节和8字节对该24字节的字符串分段进行划分,分别得到了1字节下的24个字符串子分段、2字节下的12个字符串子分段、3字节下的8个字符串分段、4字节下的6个字符串分段、6字节下的4个字符串分段和8字节下的3个字符串分段。
S103、针对字符串分段对应的每个分隔长度,根据按照分隔长度划分得到的字符串子分段,得到分隔长度下的第一编码结果。
其中,第一编码结果包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值。
针对字符串分段对应的每个分隔长度,分别得到分隔长度下的第一编码结果,编码的过程中,在划分得到的字符串子分段中取数值最小的字符串子分段,计算划分的到的字符串子分段中除了数值最小的字符串子分段的剩余字符串子分段分别与数值最小的字符串子分段的差值,将上述的数值最小的字符串子分段和得到的第一编码结果中存储的为第一字符串子分段和第二字符串子分段与第一字符串子分段的差值,第一编码结果中的数据按照设置的顺序进行存储。可以理解,第一编码结果中包括的差值数据均为正数,在第一编码结果中无需设置用于表示数据为正、负数的符号位,使得第一编码结果长度更短。
可选的,第一编码结果还包括分隔长度标识符,字符串子分段的数量,划分得到的字符串子分段中的数值最小的字符串子分段的长度,和,剩余字符串子分段分别与数值最小的字符串子分段的差值的长度。可选的,第一编码结果还包括模式终止符。
可选的,可以预先设置第一编码结果中的各数据的排列顺序,例如,可以按照如下顺序保存第一编码结果中的数据:分隔长度标识符,字符串子分段的数量,各字符串子分段的长度。
其中分隔长度标识符用于表示一段字符串编码是使用哪种分隔长度进行划分得到的,例如,表1为分隔长度与分隔长度标识符的对应关系,如表1所示,分隔长度可以设置第一编码结果中的第一位,也起到模式起始符的作用,分隔长度可以为1字节、2字节、3字节、4字节,则可以设置相应的分隔长度标识符。
表1、分隔长度与分隔长度标识符的对应关系
分隔长度 | 分隔长度标识符 |
1字节 | (0001)bin |
2字节 | (0010)bin |
3字节 | (0011)bin |
4字节 | (0100)bin |
模式终止符 | (1111)bin |
可选的,划分得到的字符串子分段中的数值最小的字符串子分段的长度,和,剩余字符串子分段分别与数值最小的字符串子分段的差值的长度可以使用预先设定的对应关系规则进行存储,例如,表2为数据长度存储规则,如表2所示,数据长度范围即上述两类数据的数据实际长度(位数),编码位数为根据不同的数据长度定义的存储在第一编码结果中的表示长度部分的编码的位数,编码格式为第一编码结果中记录的数据长度的形式。例如,划分得到的字符串子分段中的数值最小的字符串子分段二进制为“11101000”,其十进制为232,其在表2中“64-511”范围内,则对应的编码为12位,对应的编码为“110011101000”。
表2、数据长度存储规则
S104、根据字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定字符串分段的第二编码结果。
若字符串分段对应一种分隔长度,可以理解得到的第一编码结果只有一个,则字符串分段的第二编码结果即为该第一编码结果。
若字符串分段对应多种分隔长度,可以理解得到的第一编码结果有多个,则可以比较各个第一编码结果的字符长度,取字符长度最小的分隔长度下的编码结果为字符串分段的第二编码结果。
S105、根据各字符串分段的第二编码结果,得到待编码字符串的编码结果。
一种可能的实现方式中,可以将各个第二编码结果按照待编码字符串的顺序进行排列,即得到了待编码字符串的第三编码结果。
另一种可能的实现方式中,可以对各个第二编码结果再次进行编码,从而得到待编码字符串的第三编码结果。
本实施例,通过对待编码字符串进行划分,并按照不同的分隔长度进行再划分,从而计算不同分隔长度下的第一编码结果,第一编码结果中包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值,不存储原始数据,而是存储一个差值,能够有效缩减第一编码结果的长度,节省存储空间,并且,根据字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定字符串分段的第二编码结果,从而通过取不同分隔长度下的第一编码结果中长度最短的作为字符串分段的第二编码结果,使得第二编码结果的长度进一步缩减,进一步节省存储空间,根据各字符串分段的第二编码结果,得到待编码字符串的编码结果,从而实现了对Unicode字符串的编码,进而能够将Unicode能够表示的语言信息通过编码存储在二维码中,进行信息的传播。
可选的,在上述实施例的基础上,在S105之后还可以包括S106:
S106、将Unicode的字符串转换成相应的待编码字符串。
可以将上述得到的待编码字符串的编码结果转换为待编码字符串的二维码。进一步地,可以显示或者存储该二维码。其中,待编码字符串的二维码即为存储有待编码字符串的编码结果的二维码形式的信息,可以根据不同的二维码的转换规则,转换成不同的二维码。
图2为本发明提供的另一种字符串编码的方法的流程示意图,图2是在图1所示实施例的基础上,进一步地,如图2所示,S105步骤中的另一种可能的实现方式中,可以包括S1051、S1052、S1053和S1054:
S1051、当各字符串分段的第二编码结果中两个相邻字符串分段的第二编码结果使用相同的分隔长度得到时,将两个相邻字符串分段合并,得到合并字符串。
一种可能的实现方式中,可以将各字符串分段的第二编码结果按照从前到后的顺序两两一组,判断每组是否需要进行合并,如果需要合并处理,则得到合并字符串。
另一种可能的实现方式中,也可以按照从前到后的顺序判断两个相邻字符串分段的第二编码结果是否使用相同的分隔长度得到的,如果有两个相邻的字符串分段的第二编码结果是使用相同的分隔长度得到的,进行合并,得到合并字符串。
再一种可能的实现方式中,可以按照从前到后的顺序判断连续的相邻字符串分段的第二编码结果是否使用相同的分隔长度得到的,如果有连续的相邻字符串分段的第二编码结果是使用相同的分隔长度得到的,则将连续的相邻字符串分段进行合并。
S1052、对合并字符串按照该相同的分隔长度进行划分,得到至少一个字符串子分段。
对合并字符串按照该相同的分隔长度进行划分的方法与上述S102类似,此处不再赘述。例如,两个相邻的字符串分段的第二编码结果是使用分隔长度为3字节进行划分得到的,则将两个相邻的字符串分段进行合并,得到合并字符串,对该合并字符串使用3字节进行划分。
S1053、根据相同的分隔长度划分得到的字符串子分段,得到合并字符串的编码结果。
其中,合并字符串的编码结果包括相同的分隔长度划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值。
对合并字符串的编码步骤与上述实施例中的S103,S104类似,此处不再赘述。
S1054、根据合并字符串的编码结果的字符长度和两个相邻字符串分段的第二编码结果的总字符长度,确定两个相邻字符串分段的编码结果。
可以比较合并字符串的编码结果的字符长度和两个相邻字符串分段的第二编码结果的总字符长度,两个相邻字符串分段的编码结果为上述两个编码结果中长度小的,若上述两个编码结果的长度相同,两个相邻字符串分段的编码结果为上述两个编码结果中的任一个。
可选的,若合并字符串的编码结果的字符长度大于等于两个相邻字符串分段的第二编码结果的总字符长度,两个相邻字符串分段的编码结果为两个相邻字符串分段的第二编码结果。
若合并字符串的编码结果的字符长度小于两个相邻字符串分段的第二编码结果的总字符长度,两个相邻字符串分段的编码结果为合并字符串的编码结果。
通过若上述两个编码结果的长度相同,两个相邻字符串分段的编码结果为两个相邻字符串分段的第二编码结果,对原第二编码结果改动小,减少了替换原第二编码结果的步骤,从而使得对字符串进行解码的过程中,使得解码步骤减少。
本实施例,通过将使用相同的分隔长度得到的相邻字符串分段的第二编码结果进行合并,并对合并字符串进行划分、编码,从而得到合并字符串的编码结果,通过比较合并字符串的编码结果与原两个相邻字符串的第二编码结果的长度,两个相邻字符串分段的编码结果为合并字符串的编码结果与原两个相邻字符串的第二编码结果的长度较短的编码结果,使得待编码字符串的编码结果进一步缩减。
可选的,在上述实施例的基础上,步骤S1054中确定两个相邻字符串分段的编码结果之后还可以包括:对进行过上述合并处理的待编码字符串的编码结果,再执行一次上述步骤S1051、S1052、S1053和S1054,可以使得待编码字符串的编码结果进一步缩减。
图3为本发明提供的再一种字符串编码的方法的流程示意图,图3是在图1或图2所示实施例的基础上,进一步地,如图3所示,步骤S101的实现可以包括S1011:
S1011、使用预设步长集合将待编码字符串按照从前往后的顺序进行划分。
其中,预设步长集合中包括第一预设步长、第二预设步长和第三预设步长,第一预设步长大于第二预设步长,第二预设步长大于第三预设步长。
在对待编码字符串进行划分时,可以使用预设步长集合进行划分,其中,预设步长集合中的各预设步长为预先设置的。
可选的,S1011可以通过如下步骤S1011a、S1011b、S1011c和S1011d实现:
S1011a、当待编码字符串的长度大于等于第一预设步长时,使用第一预设步长对待编码字符串按照从前往后的顺序进行划分,直至剩余未分段字符串小于第一预设步长时停止使用第一预设步长进行划分。
S1011b、当剩余未分段字符串小于第一预设步长且大于等于第二预设步长时,使用第二预设步长对剩余未分段字符串进行划分,直至剩余未分段字符串小于第二预设步长时停止使用第二预设步长进行划分。
S1011c、当剩余未分段字符串小于第二预设步长且大于等于第三预设步长时,使用第三预设步长对剩余未分段字符串进行划分,直至剩余未分段字符串小于第三预设步长时停止使用第三预设步长进行划分。
S1011d、当剩余未分段字符串小于第三预设步长时,将剩余未分段字符串分成一段。
本实施例通过根据预设长度集合中不同的预设长度,对待编码字符串进行划分,从而使得划分的字符串分段合理,利于待编码字符串的编码,提高了编码效率。
示例性的,在上述实施例的基础上,进一步地,第一预设步长可以为12字节,第二预设步长可以为9字节,第三预设步长可以为6字节,步骤S101包括S1021、S1022、S1023和S1024:
S1021、针对每个字符串分段,若字符串分段为12字节,分别按照分隔长度为1字节、2字节、3字节和4字节对字符串分段进行划分,得到各分隔长度对应的字符串子分段;
S1022、若字符串分段为9字节,分别按照分隔长度为1字节和3字节对字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若字符串分段为6字节,分别按照分隔长度为1字节和2字节对字符串分段进行划分,得到各分隔长度对应的字符串子分段;
S1024、若字符串分段小于6字节,按照分隔长度为1字节对字符串分段进行划分,得到分隔长度对应的字符串子分段。
本实施例,通过将第一预设步长取为12字节,第二预设步长取为9字节,第三预设步长取为6字节,并且合理设置不同长度的字符串分段的分隔长度,从而使得对待编码字符串的划分更加合理,提高编码效率。
下面以待编码信息为一组罗马数字:“ⅠⅡⅢⅣⅤⅥⅦⅧ”为例进行说明上述实施例的编码过程,可以理解,本实施例只是为本发明提供的方法的一种实现情况,并不构成对本发明的限制。图4A为对一组罗马数字进行编码的示意图,如图4A所示,编码过程如下:
1、可以获取到这组罗马数字“ⅠⅡⅢⅣⅤⅥⅦⅧ”对应的Unicode编码,将这组罗马数字对应的Unicode按照RFC 2044规定进行转换,转换为的UTF-8编码,该UTF-8编码即为待编码字符串,其中,每个罗马数字都有对应的Unicode编码及UTF-8编码,逐一确定每个罗马数字的对应的编码,即得到了这组罗马数字的编码,例如,罗马数字“Ⅰ”对应的Unicode编码为“U+2160”,其对应的UTF-8编码为“E285A0”,表1为待编码信息、Unicode和UTF-8对应关系,如表1所示,可以获取到这组罗马数字的UTF-8编码为:E285A0E285A1E285A2E285A3E285A4E285A5E285A6E285A7。
表1、待编码信息、Unicode和UTF-8对应关系
罗马数字 | Unicode | UTF-8 |
Ⅰ | U+2160 | E285A0 |
Ⅱ | U+2161 | E285A1 |
Ⅲ | U+2162 | E285A2 |
Ⅳ | U+2163 | E285A3 |
Ⅴ | U+2164 | E285A4 |
Ⅵ | U+2165 | E285A5 |
Ⅶ | U+2166 | E285A6 |
Ⅷ | U+2167 | E285A7 |
则“E285A0E285A1E285A2E285A3E285A4E285A5E285A6E285A7”的长度为24字节。
2、对该待编码字符串按照预设步长为12字节进行分段,则将该待编码字符串分成了两段分别为:“E285A0E285A1E285A2E285A3”和“E285A4E285A5E285A6E285A7”。
3、对两段字符串分段,分别按照分隔长度为4字节、3字节、2字节和1字节进行编码。编码过程中可以预先设置第一编码结果的格式,第一编码结果按照分隔标识符,分组个数,第一字符串子分段的长度,第一字符串子分段,各字符串子分段与第一字符串子分段的差值的长度,各字符串子分段与第一字符串子分段的差值。例如,图4B为一种编码结果的格式示意图,如图4B所示,对12字节的字符串使用分隔长度为4字节进行划分时,可以得到3个字符串子分段,可以分别叫做1组,2组,3组,其第一编码结果的格式可以为图4B所示的格式。
3.1、对第一段字符串分段按照4字节进行编码,过程如下:
3.1.1、将第一段字符串分段用4字节格式分为3组字符串子分段:1组为“E285A0E2”,2组为“85A1E285”,3组为“A2E285A3”。
3.1.2、比较上述3组字符串子分段的大小,取分组数据最小的(最低比特率)分组为第一字符串子分段:“85A1E285”;根据表1中所示,分隔长度为4字节的分隔标识符为0100;分组个数为0011;第一字符串子分段数据为10000101101000011110001010000101(85A1E285的二进制表示形式);第一字符串子分段长度根据表2所示的规则得到,为10011111;各组长度也是按照表2所示的规则得到:1组长度为10011111;2组长度为0000;3组长度为10011101;1组数据为1011100111000111011111001011101;3组数据为11101010000001010001100011110。
3.1.3、由此,在如图4B的编码格式下,图4B为确定第一编码结果的过程示意图,如图4B所示,得到分隔长度为4字节的该字符串分段的第一编码结果为:
01000011100111111000010110100001111000101000010110011111000010 011101101110011100011101111100101110111101010000001010001100011110
3.2、对该第一段字符串分段按照3字节进行编码,过程如下:
3.2.1、将第一段字符串分段用3字节格式分为4组字符串子分段:1组为“E285A0”,2组为“E285A1”,3组为“E285A2”,4组为“E285A3”。
3.2.2、比较上述4组字符串子分段的大小,取分组数据最小的分组为第一字符串子分段:“E285A0”;根据表1中所示,分隔长度为3字节的分隔标识符为0011;分组个数为0100;第一字符串子分段数据为111000101000010110100000(E285A0的二进制表示形式);第一字符串子分段长度根据表2所示的规则得到,为10011000;各组长度也是按照表2所示的规则得到:1组长度为0000;2组长度为0001;3组长度为0010;4组长度为0011;2组数据为1;3组数据为10;4组数据为11。
3.2.3、由此,得到分隔长度为3字节的该第一段字符串分段的第一编码结果为:
0011001110011000111000101000010110100000000000010010001111011
3.3、对该第一段字符串分段按照2字节进行编码,过程如下:
3.3.1、将第一段字符串分段用2字节格式分为6组字符串子分段:1组为“E285”,2组为“A0E2”,3组为“85A1”,4组为“E285”,5组为“A2E2”,6组为“85A3”。
3.3.2、比较上述6组字符串子分段的大小,取分组数据最小的分组为第一字符串子分段:“85A1”;根据表1中所示,分隔长度为2字节的分隔标识符为0010;分组个数为0110;第一字符串子分段数据为1000010110100001(85A1的二进制表示形式);第一字符串子分段长度根据表2所示的规则得到,为10010000;各组长度也是按照表2所示的规则得到:1组长度为10001111;2组长度为10001101;3组长度为0000;4组长度为10001111;5组长度为10001101;6组长度为0010;1组数据为101110011100100;2组数据为1101101000001;4组数据为101110011100100;5组数据为1110101000001;6组数据为10。
3.3.3、由此,得到分隔长度为2字节的该字符串分段的第一编码结果为:
00100110100100001000010110100001100011111000110100001000111110 00110100101011100111001001101101000001101110011100100111010100000110
3.4、对该第一段字符串分段按照1字节进行编码,过程如下:
3.4.1、将第一段字符串分段用1字节格式分为12组字符串子分段:1组为“E2”,2组为“85”,3组为“A0”,4组为“E2”,5组为“85”,6组为“A1”,7组为“E2”,8组为“85”,9组为“A2”,10组为“E2”,11组为“85”,12组为“A3”。
3.4.2、比较上述12组字符串子分段的大小,取分组数据最小的分组为第一字符串子分段:“85”;根据表1中所示,分隔长度为1字节的分隔标识符为0001;分组个数为10001100;第一字符串子分段数据为10000101(85的二进制表示形式);第一字符串子分段长度根据表2所示的规则得到,为10001000;各组长度也是按照表2所示的规则得到:1组长度:0111;2组长度:0000;3组长度:0101;4组长度:0111;5组长度:0000;6组长度:0101;7组长度:0111;8组长度:0000;9组长度:0101;10组长度:0111;11组长度:0000;12组长度:0101;1组数据:1011101;3组数据:11011;4组数据:1011101;6组数据:11100;7组数据:1011101;9组数据:11101;10组数据:1011101;12组数据:11110。
3.4.3、由此,得到分隔长度为1字节的该字符串分段的第一编码结果为:
0001100011001000100010000101011100000101011100000101011100000101011100000101101110111011101110111100101110111101101110111110
3.5、比较各分隔长度,也就是1字节、2字节、3字节、4字节下的第一编码结果的长度,使用分隔长度为3字节进行编码得到的第一编码结果最短,因此,第一段字符串分段的第二编码结果为3字节下的第一编码结果,即为:
0011001110011000111000101000010110100000000000010010001111011
3.6、对第二段字符串分段按照4字节进行编码,过程原理与上述步骤3.1类似,此处不再赘述,得到分隔长度为4字节的第二段字符串分段的第一编码结果为:
001001001001111110000101101001011110001010000101100111110000100111101011100110111111100001001011101100001001111001010001100100010
对第二段字符串分段按照3字节进行编码,过程原理与上述步骤3.2类似,此处不再赘述,得到分隔长度为3字节的第二段字符串分段的第一编码结果为:
0100001110011000111000101000010110100100000000010010001111011
对第二段字符串分段按照2字节进行编码,过程原理与上述步骤3.3类似,此处不再赘述,得到分隔长度为2字节的第二段字符串分段的第一编码结果为:
00110110100100001000010110100101100011111000110100001000111110 001110001010111001110000011111001111011011100111000001000010011110110
对第二段字符串分段按照1字节进行编码,过程原理与上述步骤3.4类似,此处不再赘述,得到分隔长度为1字节的第二段字符串分段的第一编码结果为:
00011000110010001000100001010111000001010111000001100111000001 10011100000110101110111111101110110000010111011000011011101100010
3.7、比较各分隔长度,也就是1字节、2字节、3字节、4字节下的第一编码结果的长度,使用分隔长度为3字节进行编码得到的第一编码结果最短,因此,第二段字符串分段的第二编码结果为3字节下的第一编码结果,即为:
0100001110011000111000101000010110100100000000010010001111011
4、对两个相邻的字符串分段的第二编码结果进行比较,进行合并编码,第一段字符串分段和第二段字符串分段均为使用3字节进行划分得到的,因此将第一段字符串分段和第二段字符串分段进行合并,按照3字节进行划分,得到合并字符串的编码结果,过程如下:
4.1、将24字节数据用3字节格式分为8组分别为:E285A0、E285A1、E285A2、E285A3、E285A4、E285A5、E285A6、E285A7。
4.2、比较上述8组字符串子分段的大小,取分组数据最小的分组为第一字符串子分段:“E285A0”;根据表1中所示,分隔长度为3字节的分隔标识符为0100;分组个数为10001000;第一字符串子分段数据为111000101000010110100000;第一字符串子分段长度根据表2所示的规则得到,为10011000;各组长度也是按照表2所示的规则得到:1组长度:0000;2组长度:0001;3组长度:0010;4组长度:0011;5组长度:0100;6组长度:0101;7组长度:0110;8组长度:0111;2组数据:1;3组数据:10;4组数据:11;5组数据:100;6组数据:101;7组数据:110;8组数据:111。
4.3、由此,得到分隔长度为3字节的合并字符串的编码结果为:
010010001000100110001110001010000101101000000000000100100011010001010110011111011100101110111
5、合并字符串的编码结果的长度为93位,合并前两段字符串分段的长度为61+61=122位,则合并字符串的编码结果长度较短,则该待编码字符串采用合并字符串的编码结果。可选的,加上前导码和模式终止符,则得到Unicode中罗马数字“ⅠⅡⅢⅣⅤⅥⅦⅧ”的编码(共101位)为:
10010100100010001001100011100010100001011010000000000001001000 110100010101100111110111001011101111111
由此可见,本发明提供的方法可以实现对Unicode的编码,同时能够将编码所占数据长度缩短,更加有利于将信息存储在二维码中。
图5为本发明提供的一种字符串编码的装置的结构示意图,如图5所示,本发明提供的装置包括:
第一划分模块501,用于将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段,其中,在后字符串分段的长度小于相邻的在前字符串分段的字节数;
第二划分模块502,用于针对每个字符串分段,根据字符串分段对应的分隔长度将字符串划分得到至少一个字符串子分段,其中,字符串分段对应的分隔长度与字符串分段的长度关联,字符串分段对应的分隔长度为一个或者多个;
第一得到模块503,用于针对字符串分段对应的每个分隔长度,根据分隔长度划分得到的字符串子分段,得到分隔长度下的第一编码结果,其中,第一编码结果包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值;
第一确定模块504,用于根据字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定字符串分段的第二编码结果;
第二得到模块505,用于根据各字符串分段的第二编码结果,得到待编码字符串的编码结果。
可选的,第二得到模块505包括:
合并模块,用于当各字符串分段的第二编码结果中两个相邻字符串分段的第二编码结果使用相同的分隔长度得到时,将两个相邻字符串分段合并,得到合并字符串;
第三划分模块,用于对合并字符串按照相同的分隔长度进行划分,得到至少一个字符串子分段;
第三得到模块,用于根据相同的分隔长度划分得到的字符串子分段,得到合并字符串的编码结果,其中,合并字符串的编码结果包括相同的分隔长度划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值;
第二确定模块,用于根据合并字符串的编码结果的字符长度和两个相邻字符串分段的第二编码结果的总字符长度,确定两个相邻字符串分段的编码结果。
可选的,第二确定模块具体用于:
若合并字符串的编码结果的字符长度大于等于两个相邻字符串分段的第二编码结果的总字符长度,两个相邻字符串分段的编码结果为两个相邻字符串分段的第二编码结果;
若合并字符串的编码结果的字符长度小于两个相邻字符串分段的第二编码结果的总字符长度,两个相邻字符串分段的编码结果为合并字符串的编码结果。
可选的,第一划分模块501具体用于:
使用预设步长集合将待编码字符串按照从前往后的顺序进行划分,其中,预设步长集合中包括第一预设步长、第二预设步长和第三预设步长,第一预设步长大于第二预设步长,第二预设步长大于第三预设步长;
使用预设步长集合将待编码字符串按照从前往后的顺序进行划分,包括:当待编码字符串的长度大于等于第一预设步长时,使用第一预设步长对待编码字符串按照从前往后的顺序进行划分,直至剩余未分段字符串小于第一预设步长时停止使用第一预设步长进行划分;
当剩余未分段字符串小于第一预设步长且大于等于第二预设步长时,使用第二预设步长对剩余未分段字符串进行划分,直至剩余未分段字符串小于第二预设步长时停止使用第二预设步长进行划分;
当剩余未分段字符串小于第二预设步长且大于等于第三预设步长时,使用第三预设步长对剩余未分段字符串进行划分,直至剩余未分段字符串小于第三预设步长时停止使用第三预设步长进行划分;
当剩余未分段字符串小于第三预设步长时,将剩余未分段字符串分成一段。
可选的,第一预设步长为12字节,第二预设步长为9字节,第三预设步长为6字节,第二划分模块502具体用于:
针对每个字符串分段,若字符串分段为12字节,分别按照分隔长度为1字节、2字节、3字节和4字节对字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若字符串分段为9字节,分别按照分隔长度为1字节和3字节对字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若字符串分段为6字节,分别按照分隔长度为1字节和2字节对字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若字符串分段小于6字节,按照分隔长度为1字节对字符串分段进行划分,得到分隔长度对应的字符串子分段。
可选的,第一确定模块具体用于:
比较各分隔长度下的第一编码结果的字符长度,字符串分段的第二编码结果为第一编码结果的字符长度最小的分隔长度下的第一编码结果。
可选的,第一编码结果还包括分隔长度标识符,字符串子分段的数量和字符串子分段的长度。
可选的,待编码字符串为万国码Unicode的二进制格式的字符串,Unicode的二进制格式包括以下任一一种编码格式:UTF8、UTF16BE、UTF16LE、UTF32BE、UTF32LE;
将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段之前,还包括:
将万国码unicode格式的字符串转换成待编码字符串。
上述实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图6为本发明提供一种字符串编码的设备的结构示意图,如图6所示,本发明提供的设备包括:
存储器601,用于存储处理器602可执行指令的存储器;
处理器602,用于在计算机程序被执行时,执行如上述第一方面的方法的指令。
上述实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本发明提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如上述第一方面的字符串编码的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。
Claims (10)
1.一种字符串编码的方法,其特征在于,包括:
将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段,其中,在后字符串分段的长度小于相邻的在前字符串分段的字节数;
针对每个字符串分段,根据所述字符串分段对应的分隔长度将所述字符串划分得到至少一个字符串子分段,其中,所述字符串分段对应的分隔长度与所述字符串分段的长度关联,所述字符串分段对应的分隔长度为一个或者多个;
针对所述字符串分段对应的每个分隔长度,根据所述分隔长度划分得到的字符串子分段,得到所述分隔长度下的第一编码结果,其中,所述第一编码结果包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值;
根据所述字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定所述字符串分段的第二编码结果;
根据各所述字符串分段的第二编码结果,得到所述待编码字符串的编码结果;
所述根据各所述字符串分段的第二编码结果,得到所述待编码字符串的编码结果,包括:
当各字符串分段的第二编码结果中两个相邻字符串分段的第二编码结果使用相同的分隔长度得到时,将所述两个相邻字符串分段合并,得到合并字符串;
对所述合并字符串按照所述相同的分隔长度进行划分,得到至少一个字符串子分段;
根据所述相同的分隔长度划分得到的字符串子分段,得到所述合并字符串的编码结果,其中,所述合并字符串的编码结果包括所述相同的分隔长度划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值;
若所述合并字符串的编码结果的字符长度大于等于所述两个相邻字符串分段的第二编码结果的总字符长度,所述两个相邻字符串分段的编码结果为两个相邻字符串分段的第二编码结果;
若所述合并字符串的编码结果的字符长度小于所述两个相邻字符串分段的第二编码结果的总字符长度,所述两个相邻字符串分段的编码结果为所述合并字符串的编码结果。
2.根据权利要求1所述的方法,其特征在于,所述将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段,包括:
使用预设步长集合将待编码字符串按照从前往后的顺序进行划分,其中,所述预设步长集合中包括第一预设步长、第二预设步长和第三预设步长,所述第一预设步长大于所述第二预设步长,所述第二预设步长大于所述第三预设步长;
使用预设步长集合将待编码字符串按照从前往后的顺序进行划分,包括:当所述待编码字符串的长度大于等于所述第一预设步长时,使用所述第一预设步长对所述待编码字符串按照从前往后的顺序进行划分,直至剩余未分段字符串小于所述第一预设步长时停止使用所述第一预设步长进行划分;
当剩余未分段字符串小于所述第一预设步长且大于等于所述第二预设步长时,使用所述第二预设步长对剩余未分段字符串进行划分,直至剩余未分段字符串小于所述第二预设步长时停止使用所述第二预设步长进行划分;
当剩余未分段字符串小于所述第二预设步长且大于等于所述第三预设步长时,使用所述第三预设步长对剩余未分段字符串进行划分,直至剩余未分段字符串小于所述第三预设步长时停止使用所述第三预设步长进行划分;
当剩余未分段字符串小于所述第三预设步长时,将剩余未分段字符串分成一段。
3.根据权利要求2所述的方法,其特征在于,所述第一预设步长为12字节,第二预设步长为9字节,所述第三预设步长为6字节,所述针对每个字符串分段,根据所述字符串分段对应的分隔长度将所述字符串划分得到至少一个字符串子分段,包括:
针对每个字符串分段,若所述字符串分段为12字节,分别按照分隔长度为1字节、2字节、3字节和4字节对所述字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若所述字符串分段为9字节,分别按照分隔长度为1字节和3字节对所述字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若所述字符串分段为6字节,分别按照分隔长度为1字节和2字节对所述字符串分段进行划分,得到各分隔长度对应的字符串子分段;
若所述字符串分段小于6字节,按照分隔长度为1字节对所述字符串分段进行划分,得到所述分隔长度对应的字符串子分段。
4.根据权利要求1所述的方法,其特征在于,所述根据所述字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定所述字符串分段的第二编码结果,包括:
比较各分隔长度下的所述第一编码结果的字符长度,所述字符串分段的第二编码结果为所述第一编码结果的字符长度最小的所述分隔长度下的第一编码结果。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述第一编码结果还包括分隔长度标识符,字符串子分段的数量,划分得到的字符串子分段中的数值最小的字符串子分段的长度,和,剩余字符串子分段分别与数值最小的字符串子分段的差值的长度。
6.根据权利要求1-4任一项所述的方法,其特征在于,所述待编码字符串为万国码Unicode的二进制格式编码的字符串,所述Unicode的二进制格式包括以下任一一种编码格式:UTF8、UTF16BE、UTF16LE、UTF32BE、UTF32LE;
所述将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段之前,还包括:
将Unicode的字符串转换成相应的待编码字符串。
7.根据权利要求1-4任一项所述的方法,其特征在于,所述根据各所述字符串分段的第二编码结果,得到所述待编码字符串的编码结果之后,还包括:
将所述待编码字符串的编码结果转换成所述待编码字符串的二维码。
8.一种字符串编码的装置,其特征在于,包括:
第一划分模块,用于将待编码字符串按照从前往后的顺序进行划分,得到至少一个字符串分段,其中,在后字符串分段的长度小于相邻的在前字符串分段的字节数;
第二划分模块,用于针对每个字符串分段,根据所述字符串分段对应的分隔长度将所述字符串划分得到至少一个字符串子分段,其中,所述字符串分段对应的分隔长度与所述字符串分段的长度关联,所述字符串分段对应的分隔长度为一个或者多个;
第一得到模块,用于针对所述字符串分段对应的每个分隔长度,根据所述分隔长度划分得到的字符串子分段,得到所述分隔长度下的第一编码结果,其中,所述第一编码结果包括划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值;
确定模块,用于根据所述字符串分段对应的各分隔长度下的第一编码结果的字符长度,确定所述字符串分段的第二编码结果;
第二得到模块,用于根据各所述字符串分段的第二编码结果,得到所述待编码字符串的编码结果;
所述第二得到模块,包括:
合并模块,用于当各字符串分段的第二编码结果中两个相邻字符串分段的第二编码结果使用相同的分隔长度得到时,将所述两个相邻字符串分段合并,得到合并字符串;
第三划分模块,用于对所述合并字符串按照所述相同的分隔长度进行划分,得到至少一个字符串子分段;
第三得到模块,用于根据所述相同的分隔长度划分得到的字符串子分段,得到所述合并字符串的编码结果,其中,所述合并字符串的编码结果包括所述相同的分隔长度划分得到的字符串子分段中的数值最小的字符串子分段,以及剩余字符串子分段分别与数值最小的字符串子分段的差值;
第二确定模块,用于若所述合并字符串的编码结果的字符长度大于等于所述两个相邻字符串分段的第二编码结果的总字符长度,所述两个相邻字符串分段的编码结果为两个相邻字符串分段的第二编码结果;若所述合并字符串的编码结果的字符长度小于所述两个相邻字符串分段的第二编码结果的总字符长度,所述两个相邻字符串分段的编码结果为所述合并字符串的编码结果。
9.一种字符串编码的设备,其特征在于,包括:
存储器,用于存储处理器可执行指令的存储器;
处理器,用于在计算机程序被执行时,实现如上述权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至7任一项所述的字符串编码的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010861273.0A CN112200286B (zh) | 2020-08-25 | 2020-08-25 | 字符串编码的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010861273.0A CN112200286B (zh) | 2020-08-25 | 2020-08-25 | 字符串编码的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112200286A CN112200286A (zh) | 2021-01-08 |
CN112200286B true CN112200286B (zh) | 2023-10-03 |
Family
ID=74006132
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010861273.0A Active CN112200286B (zh) | 2020-08-25 | 2020-08-25 | 字符串编码的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112200286B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112800722B (zh) * | 2021-02-09 | 2024-04-26 | 柳州智视科技有限公司 | 基于语义理解的文字组织编码方法 |
CN113098524A (zh) * | 2021-03-22 | 2021-07-09 | 北京达佳互联信息技术有限公司 | 信息编码方法、装置、电子设备及存储介质 |
CN113627578B (zh) * | 2021-08-09 | 2024-02-09 | 中国物品编码中心 | 二维码生成方法、识别方法、装置、二维码、设备及介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7099322B1 (en) * | 1999-03-25 | 2006-08-29 | Canon Kabushiki Kaisha | Method and device for assigning at least one routing identifier to at least one bridge in a network |
CN101354697A (zh) * | 2008-09-10 | 2009-01-28 | 中国物品编码中心 | 物品编码解析方法及系统 |
CN104751410A (zh) * | 2013-12-31 | 2015-07-01 | 腾讯科技(深圳)有限公司 | 图像与二维码的融合方法及装置 |
CN106452756A (zh) * | 2016-11-08 | 2017-02-22 | 王栋 | 可离线验证安全二维码构造验证方法与装置 |
CN106533450A (zh) * | 2016-11-14 | 2017-03-22 | 国网北京市电力公司 | Pms编码压缩方法和装置 |
CN106656198A (zh) * | 2016-11-23 | 2017-05-10 | 郑州云海信息技术有限公司 | 一种基于lz77的编码方法 |
CN110768936A (zh) * | 2018-07-27 | 2020-02-07 | 华为技术有限公司 | 隐私数据的上报方法、装置与存储介质 |
CN111062456A (zh) * | 2019-12-25 | 2020-04-24 | 李蕴光 | 一种二维码加密算法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7307551B2 (en) * | 2005-08-30 | 2007-12-11 | International Business Machines Corporation | Delimiter lookup using processor permutation instruction |
-
2020
- 2020-08-25 CN CN202010861273.0A patent/CN112200286B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7099322B1 (en) * | 1999-03-25 | 2006-08-29 | Canon Kabushiki Kaisha | Method and device for assigning at least one routing identifier to at least one bridge in a network |
CN101354697A (zh) * | 2008-09-10 | 2009-01-28 | 中国物品编码中心 | 物品编码解析方法及系统 |
CN104751410A (zh) * | 2013-12-31 | 2015-07-01 | 腾讯科技(深圳)有限公司 | 图像与二维码的融合方法及装置 |
CN106452756A (zh) * | 2016-11-08 | 2017-02-22 | 王栋 | 可离线验证安全二维码构造验证方法与装置 |
CN106533450A (zh) * | 2016-11-14 | 2017-03-22 | 国网北京市电力公司 | Pms编码压缩方法和装置 |
CN106656198A (zh) * | 2016-11-23 | 2017-05-10 | 郑州云海信息技术有限公司 | 一种基于lz77的编码方法 |
CN110768936A (zh) * | 2018-07-27 | 2020-02-07 | 华为技术有限公司 | 隐私数据的上报方法、装置与存储介质 |
CN111062456A (zh) * | 2019-12-25 | 2020-04-24 | 李蕴光 | 一种二维码加密算法 |
Also Published As
Publication number | Publication date |
---|---|
CN112200286A (zh) | 2021-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112200286B (zh) | 字符串编码的方法和装置 | |
US4782325A (en) | Arrangement for data compression | |
US4611280A (en) | Sorting method | |
CN102567293B (zh) | 文本文件的编码格式探测方法和装置 | |
CA1055611A (en) | Uniform decoding of minimum-redundancy codes | |
US8670976B2 (en) | System and methods for encoding and decoding multi-lingual text in a matrix code symbol | |
CN110147536B (zh) | 一种基于文件映射的数据处理方法、装置及设备 | |
CN104391993A (zh) | 一种识别网页编码方法及系统 | |
CN101551820B (zh) | 兴趣点属性的索引数据库的生成方法和装置 | |
CN101013420A (zh) | 一种识别中文文本编码形式的方法 | |
CN116827354B (zh) | 一种文件数据分布式存储管理系统 | |
US20120091203A1 (en) | Method of encoding and decoding text on a matrix code symbol | |
RU2470348C2 (ru) | Реализуемый компьютером способ кодирования числовых данных и способ кодирования структур данных для передачи в телекоммуникационной системе, основанной на вышеуказанном способе кодирования числовых данных | |
CN113905093A (zh) | 序列化、反序列化方法、装置及电子设备 | |
CN109446198B (zh) | 一种基于双数组的trie树节点压缩方法及装置 | |
CN115495439B (zh) | 数据库水印的嵌入方法、溯源方法、装置和电子设备 | |
CN105046306A (zh) | 一种包含多种生物特征信息的彩色多维码编码方法 | |
CN110287147B (zh) | 一种字符串排序方法及装置 | |
CN112527951B (zh) | 整数数据的存储方法、装置及存储介质 | |
CN112016270B (zh) | 汉信码的物流信息编码方法、装置及设备 | |
CN113779932A (zh) | 数字格式化方法、装置、终端设备及存储介质 | |
CN100479331C (zh) | 条码的解码方法 | |
CN113836869B (zh) | 对混杂多编码字符文本进行统一编码转换的方法及装置 | |
CN111178008A (zh) | 一种面向数字字符的数据编码方法、解析方法及系统 | |
CN111104484B (zh) | 文本相似度检测方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |