CN111444680B - 生僻字的编码扩展方法、装置、存储介质及电子设备 - Google Patents
生僻字的编码扩展方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN111444680B CN111444680B CN202010335864.4A CN202010335864A CN111444680B CN 111444680 B CN111444680 B CN 111444680B CN 202010335864 A CN202010335864 A CN 202010335864A CN 111444680 B CN111444680 B CN 111444680B
- Authority
- CN
- China
- Prior art keywords
- byte
- code
- character
- escape
- coding
- 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
- 238000000034 method Methods 0.000 title claims abstract description 80
- 108091026890 Coding region Proteins 0.000 claims abstract description 49
- 238000006243 chemical reaction Methods 0.000 claims description 36
- 230000009467 reduction Effects 0.000 claims description 12
- 238000012546 transfer Methods 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 15
- 238000012545 processing Methods 0.000 description 11
- 238000004364 calculation method Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 210000001503 joint Anatomy 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 2
- 238000013523 data management Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 101000695861 Arabidopsis thaliana Brefeldin A-inhibited guanine nucleotide-exchange protein 5 Proteins 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Document Processing Apparatus (AREA)
Abstract
本发明公开了一种生僻字的编码扩展方法、装置、存储介质及电子设备,方法包括:获取第一输入信息、当前支持的第一编码以及待转换的第二编码;将所述第一输入信息转换为第一编码的字节信息;判断所述字节信息中是否包括生僻字的字节编码序列;若所述字节信息中包括所述生僻字的字节编码序列,则将所述字节编码序列转义为与第一编码以及第二编码约定格式对应的转义序列进行表示。本发明提供的生僻字的编码扩展方法、装置、存储介质及电子设备,可以解决现有各小字符集编码的系统中难以表示、存储、传输生僻字的问题。
Description
技术领域
本发明是涉及网络信息技术领域,特别是涉及一种生僻字的编码扩展方法、装置、存储介质及电子设备。
背景技术
目前,全社会各行业、组织机构等内部的大量IT系统以及人民群众所使用的电脑、手机等电子设备由于不同时期的不同厂商制造出品、开发实施,所使用的相关标准、字符集编码也多种多样。
现有技术对字符集进行编码,常见的有3个体系:
1、ASCII和ANSI编码体系:中国大陆有GB2312、GBK、GB18030几个国家和行业标准,港台有BIG5(地区标准CNS11643)。其中只有GB18030才是大字符集的编码,但GBK应用最广,包括大量的操作系统、数据库、中间件、内外接口、应用系统及打印机等硬件都采用或只支持GBK这种小字符集编码,或者更小的GB2312编码。在简体Windows操作系统中,微软并未真正支持GB18030,在大部分场景中还是使用GBK(代码页936)。
2、EBCDIC编码体系:用于IBM的大型机和AS/400小型机,银行业应用较多,常用的是CCSID 1388,其收录字符集比GBK的略大,所以也属于小字符集编码。
3、Unicode编码体系:对应国际标准ISO10646,等同的国家标准为GB13000,具体存储和传输常用的是其转换格式UTF16、UTF8,属于大字符集的编码。UTF8编码在新的系统中应用越来越广。在Windows操作系统内部、Java语言String内部都是采用UTF16编码来表示所有字符的,也有数据库采用UTF16编码的,中国大陆居民身份证芯片内部也采用UTF16编码存储姓名。
姓名含生僻字人员在证照办理、民航铁路购票、网上银行、使用微信和支付宝类电子支付业务、档案查询、社保办理等,涉及电脑录入姓名或核实身份证上姓名时会遇到问题。原因是上述相关机构的IT系统内部或者系统间接口、对外服务接口很多只支持GBK或EBCDIC CCSID 1388这些小字符集编码。有些小字符集编码的系统由于开发/供应商倒闭等各种原因导致无法升级支持大字符集编码,对于采用小字符集的数据库系统也无法存储生僻字。
基于此,本申请的发明人发现,一些操作系统、数据库、中间件、内外接口、应用系统只支持小字符编码,而Windows操作系统内部、Java语言String内部虽然支持大字符编码,在实际的应用过程中大字符集系统与小字符集系统对接转换时却会造成生僻字丢失,导致包含生僻字姓名的人员不能得到正常的服务。
公开于该背景技术部分的信息仅仅旨在增加对本发明的总体背景的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域一般技术人员所公知的现有技术。
发明内容
为解决上述问题,本发明实施例的目的在于提供一种生僻字的编码扩展方法、装置、存储介质及电子设备。
第一方面,本发明实施例提供了一种生僻字的编码扩展方法,包括:获取第一输入信息、当前支持的第一编码以及待转换的第二编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
将所述第一输入信息转换为第一编码的字节信息;
判断所述字节信息中是否包括生僻字的字节编码序列;
若所述字节信息中包括所述生僻字的字节编码序列,则将所述生僻字的字节编码序列转义为与第一编码以及第二编码约定格式对应的转义序列进行表示。
在一种可能的实现方式中,判断所述字节信息中是否包括生僻字的字节编码序列包括:当第一编码为GB18030编码时,若字节信息中存在合法的4字节编码序列表示的字符,则判断为包括生僻字的字节编码序列。
在一种可能的实现方式中,判断所述字节信息中是否包括生僻字的字节编码序列包括:
当第一编码为UTF8时,若字节信息中存在合法的2-4字节编码序列表示的字符,则获取该字节编码序列表示字符的Unicode编码;
根据获取的Unicode编码查表或计算得到该字符的GB18030编码;
若为合法的GB18030编码的4字节编码序列表示的字符,则判断为包括生僻字的字节编码序列。
在一种可能的实现方式中,所述与第一编码以及第二编码约定格式对应的转义序列包括:转义开始字符的字节编码序列以及固定长度的与所述生僻字的字节编码序列对应的16进制Unicode编码的字节编码序列。
在一种可能的实现方式中,所述与第一编码以及第二编码约定格式对应的转义序列包括:转义开始字符的字节编码序列、与所述生僻字的字节编码序列对应的16进制Unicode编码的字节编码序列以及转义结束的字符的字节编码序列,其中所述生僻字的16进制Unicode编码的字节编码序列为变长。
在一种可能的实现方式中,将所述第一输入信息转换为第一编码的字节信息之后,还包括:
若所述字节信息中包括单字节字符,则判断所述单字节字符是否为第一转义字符,其中,所述第一转义字符包括转义开始字符;
若所述单字节字符是所述第一转义字符,则按照预设方式对所述第一转义字符进行转换;
若所述单字节字符不是所述第一转义字符,则按照第一编码与第二编码的标准进行转换。
在一种可能的实现方式中,当第二编码为EBCDIC时,所述与第一编码以及第二编码约定格式对应的转义序列包括:
与所述生僻字的Unicode编码对应的4字节代理对,其中,所述4字节代理对包括第1字节b1、第2字节b2、第3字节b3以及第4字节b4;
第1字节b1=m1+0xC0;
第2字节b2=m2+0x10;
第3字节b3=m3+0x80;
第4字节b4=n3+0x10;
若U=所述生僻字的16进制Unicode编码值,则m1=U/16384取整,n1=U%16384,m2=n1/1024取整,n2=n1%1024,m3=n2/16取整,n3=n2%16。
第二方面,本发明实施例还提供了一种生僻字的编码扩展装置,包括:
第一获取模块,用于获取第一输入信息、当前支持的第一编码以及待转换的第二编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
第一转换模块,用于将所述第一输入信息转换为第一编码的字节信息;
第一判断模块,用于判断所述字节信息中是否包括生僻字的字节编码序列;
转义模块,用于在所述字节信息包括所述生僻字的字节编码序列时,将所述生僻字的字节编码序列转义为与第一编码以及第二编码约定格式对应的转义序列进行表示。
第三方面,本发明实施例还提供了一种生僻字的编码扩展方法,包括:
获取第二输入信息、当前支持的第二编码以及待转换的第一编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
将所述第二输入信息转换为第二编码的字节信息;
若所述字节信息中包括单字节字符,则判断所述单字节字符是否为第二转义字符;
若所述单字节字符是所述第二转义字符,且所述第二转义字符后的字节编码序列为符合约定格式的转义序列,则将所述转义序列转义还原为与第二编码以及第一编码对应格式的字节编码序列。
在一种可能的实现方式中,将所述第二输入信息转换为第二编码的字节信息之后还包括:
当第二编码为EBCDIC时,将所述第二输入信息转换为第二编码的字节信息之后还包括:
若所述字节信息中包括4字节代理对,则获取所述4字节代理对代表的的Unicode编码;
根据所述4字节代理对代表的Unicode编码得到与第一编码对应的字节编码序列进行转义还原。
在一种可能的实现方式中,将所述转义序列转义还原为与第二编码以及第一编码对应格式的字节编码序列包括:
获取所述转义序列代表的Unicode编码;
根据所述转义序列代表的Unicode编码得到与第一编码对应的字节编码序列进行转义还原。
在一种可能的实现方式中,所述获取所述4字节代理对代表的Unicode编码包括:
根据公式一计算4字节代理对代表的Unicode编码,所述公式一包括:
Unicode编码=(b1-0xC0)*16384+(b2-0x10)*1024+(b3-0x80)*16+b4-0x10;
其中,b1、b2、b3、b4为代理对的四个字节。
在一种可能的实现方式中,在所述判断所述单字节字符是否为第二转义字符之后还包括:
若所述单字节字符是所述第二转义字符,且所述第二转义字符后的字节编码序列不是符合约定格式的转义序列,则按照第一编码与第二编码的标准对所述第二转义字符进行转换,其中,所述第二转义字符包括转义开始字符。
第四方面,本发明实施例还提供了一种生僻字的编码扩展装置,包括:
第二获取模块,用于获取第二输入信息、当前支持的第二编码以及待转换的第一编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
第二转换模块,用于将所述第二输入信息转换为第二编码的字节信息;
第二判断模块,用于在所述字节信息中包括单字节字符时,判断所述单字节字符是否为第二转义字符;
还原模块,用于在所述单字节字符是第二转义字符,且所述第二转义字符后的字节编码序列为符合约定格式的转义序列时,将所述转义序列转义还原为与第二编码以及第一编码对应格式的字节编码序列。
第五方面,本发明实施例还提供了一种存储介质,所述存储介质存储有计算机可执行指令,所述计算机可执行指令用于执行权利要求上述的生僻字的编码扩展方法。
第六方面,本发明实施例还提供了一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的生僻字的编码扩展方法。
本发明提供的生僻字的编码扩展方法、装置、存储介质及电子设备,通过检查字节信息中是否包括对应合法的GB18030编码的4字节编码序列表示的字符来判断所述字节信息中是否包括生僻字,若包括生僻字,则将生僻字的字节编码序列转义为小字符集(如GBK或EBCDIC CCSID 1388)范围的转义序列进行表示,可以实现基于小字符集的编码空间进行扩展以表示生僻字的方法及对应的转码工具或组件,解决现有各小字符集编码的系统官方技术难以表示、存储、传输生僻字的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本发明一实施例所提供的生僻字的编码扩展方法的流程图;
图2示出了本发明又一实施例所提供的生僻字的编码扩展方法的流程图;
图3示出了GBK的单字节块和双字节块的编码范围结构示意图;
图4示出了EBCDIC CCSID 1388的编码范围结构示意图;
图5示出了本发明实施例所提供的EBCDIC CCSID 1388的方案二的编码范围结构示意图;
图6示出了本发明实施例所提供的生僻字的编码扩展方法的一种实现方式的多系统之间对接的结构示意图;
图7示出了本发明一实施例所提供的生僻字的编码扩展装置的结构示意图;
图8示出了本发明另一实施例所提供的生僻字的编码扩展装置的结构示意图;
图9示出了本发明实施例所提供的用于执行生僻字的编码扩展方法的电子设备的结构示意图。
具体实施方式
下面结合附图,对本发明的具体实施方式进行详细描述,但应当理解本发明的保护范围并不受具体实施方式的限制。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”、“顺时针”、“逆时针”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
除非另有其它明确表示,否则在整个说明书和权利要求书中,术语“包括”或其变换如“包含”或“包括有”等等将被理解为包括所陈述的元件或组成部分,而并未排除其它元件或其它组成部分。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
本发明实施例提供了一种生僻字的编码扩展方法的流程图,参见图1所示,包括:步骤101-步骤107;
步骤101,获取第一输入信息、当前支持的第一编码以及待转换的第二编码,其中,第一编码为大字符集编码,第二编码为小字符集编码。
步骤102,将所述第一输入信息转换为第一编码的字节信息。
具体的,将所述第一输入信息转换为16进制内码。字节信息为转换后的16进制内码,可以包括多个字节。
步骤103,判断所述字节信息中是否包括生僻字的字节编码序列。
其中,把超出GBK编码字符集范围的字符称为生僻字。生僻字的字节编码序列为合法的GB18030编码的4字节编码序列表示的字符。
依次判断字节信息,当第一编码为GB18030编码时,若字节信息中包括合法的GB18030编码的4字节编码序列表示的字符,则判断为存在生僻字的字节编码序列。如果是GBK双字节字符,则判断不存在生僻字的字节编码序列,正常转换。正常转换为按照现有技术中的第一编码与第二编码的标准进行转换。
其中,判断字节信息中是否包括合法的4字节字符的步骤可以包括:若包括4字节字符且第1字节在0x81~0xFE范围内,第2字节在0x30~0x39范围内,第3字节在0x81~0xFE范围内,以及第4字节在0x30~0x39范围内,则判断为包括合法的4字节字符。
当第一编码为UTF8时,若字节信息中包括合法的2-4字节编码序列表示的字符,则获取其Unicode编码;根据获取的Unicode编码查表或计算得到其GB18030编码;若为合法的GB18030编码的4字节编码序列表示的字符,则判断为包括生僻字的字节编码序列。若为GBK的2字节编码,则判断不存在生僻字的字节编码序列,正常转换。
例如,生僻字的GB18030编码是8139F434,UTF-16编码是3437,UTF-8编码是E390B7,EBCDIC CCSID 1388编码是CF78,因其GB18030编码16进制数是8位即4字节,当第一编码为GB18030编码时,因为它超出2字节的GBK范围,所以判定为生僻字,但是如果第一编码是UTF-16或者UTF-8或者EBCDIC CCSID 1388,需要查对应关系表,得到它的GB18030编码以后再进行生僻字的判定。
步骤104,若包括生僻字的字节编码序列,则将所述字节编码序列转义为与第一编码以及第二编码约定格式对应的转义序列进行表示。
其中,与第一编码以及第二编码约定格式对应的转义序列可以包括:转义开始字符以及固定长度的与所述生僻字的字节编码序列对应的16进制Unicode编码的字节编码序列。若16进制Unicode编码的字节编码序列不足固定长度的位数则左补数字字符0的字节编码。
或者,转义开始字符、与所述生僻字的字节编码序列对应的16进制Unicode编码的字节编码序列以及转义结束的字符,此时与所述生僻字的字节编码序列对应的16进制Unicode编码的字节编码序列为变长。
在一种实现方式中,步骤104中与第一编码以及第二编码约定格式对应的转义序列包括:与所述生僻字的Unicode编码对应的4字节代理对;其中,4字节代理对包括第1字节b1、第2字节b2、第3字节b3以及第4字节b4。
一种可能的计算公式如下:
第1字节b1=m1+0xC0;
第2字节b2=m2+0x10;
第3字节b3=m3+0x80;
第4字节b4=n3+0x10;
其中假设U=生僻字的16进制Unicode编码值,则m1=U/16384取整,n1=U%16384,m2=n1/1024取整,n2=n1%1024,m3=n2/16取整,n3=n2%16。
需要说明的是,上述代理对的计算方式对应后续实施例中的EBCDIC CCSID 1388方案二的转义,转义开始字符以及与所述生僻字的字节编码序列对应的16进制Unicode编码的字节编码序列的格式对应后续实施例中GBK的所有转义以及EBCDIC CCSID 1388方案一的转义。
在一种实现方式中,步骤102之后还包括:
步骤105,若所述字节信息为单字节字符,则判断所述单字节字符是否为第一转义字符,其中,所述第一转义字符包括转义开始字符;
步骤106,若所述单字节字符是第一转义字符,则按照预设方式对第一转义字符进行转换;
例如,第一转义字符可以是反斜杠,此时的预设方式可以为一个反斜杠变为两个。当转义开始字符是多个字符时,转义处理时只需要对首字符进行转义,转义开始字符的非首字符不需要单独判断处理。
步骤107,若所述单字节字符不是第一转义字符,则按照第一编码与第二编码的标准进行转换。
需要说明的是,步骤105-107与步骤103-104的执行不存在先后顺序,本实施例对执行顺序不做限定。
由此,通过本实施例的生僻字的编码扩展方法,通过检查字节信息中是否包括对应合法的GB18030编码的4字节编码序列表示的字符来判断所述字节信息中是否包括生僻字,若包括生僻字,则将生僻字的字节编码序列转义为小字符集(如GBK或EBCDIC CCSID1388)范围的转义序列进行表示以便存储、和传输,可以实现基于小字符集的编码空间进行扩展以表示生僻字的方法及对应的转码工具或组件,解决现有各小字符集编码的系统官方技术难以表示、存储、传输生僻字的问题。
避免了在实际的应用过程中大字符集系统与小字符集系统对接转换时造成超出小字符集的生僻字丢失的问题,使得包含生僻字姓名的人员可以得到正常的服务。
本发明实施例又提供了一种生僻字的编码扩展方法的流程图,参见图2所示,包括:步骤201-步骤207;
步骤201,获取第二输入信息、当前支持的第二编码以及待转换的第一编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
步骤202,将所述第二输入信息转换为当前支持的第二编码的字节信息;
步骤203,若所述字节信息中存在单字节字符,则判断所述单字节字符是否为预设的第二转义字符;
步骤204,若所述单字节字符是第二转义字符,且所述第二转义字符后的字节编码序列为符合约定格式的转义序列,则将所述转义序列转义还原为与第二编码以及第一编码对应格式的字节编码序列。
其中,第二转义字符为预设的用于表示转义开始或结束的字符,这里具体可以为转义开始字符,例如可以为表示反斜杠的单字节字符。可以通过第二转义字符后的字节编码序列,实现判断是否为转义序列。
将所述转义序列还原为与第二编码以及第一编码对应格式的字节编码序列进行转义还原包括:获取所述转义序列代表的Unicode编码;根据所述转义序列代表的Unicode编码得到与第一编码对应的字节编码序列进行转义还原。
步骤202之后还包括:
步骤205,若所述字节信息中存在4字节代理对,则获取所述4字节代理对代表的Unicode编码;
具体的,可以通过判断四字节的编码值所在范围,实现判断是否为4字节代理对。
步骤206,根据所述4字节代理对代表的Unicode编码得到与第一编码对应的字节编码序列进行转义还原。
其中,根据Unicode编码,查表或计算得到其与第一编码对应的编码。
需要说明的是,步骤205以及206对应后续实施例中的EBCDIC CCSID1388方案二的还原方法,步骤203以及204对应GBK的所有还原方法以及EBCDIC CCSID 1388方案一的还原方法。
步骤205中获取所述4字节代理对代表的Unicode编码,可以通过如下方式进行实现:
根据公式一计算Unicode编码,所述公式一包括:
Unicode编码=(b1-0xC0)*16384+(b2-0x10)*1024+(b3-0x80)*16+b4-0x10;其中,b1、b2、b3、b4为代理对的四个字节。
在一种实现方式中,步骤203判断是否为转义字符之后还包括:
步骤207,若单字节字符是第二转义字符,且所述第二转义字符后的字节编码序列不是符合约定格式的转义序列,则按照第一编码与第二编码的标准对第二转义字符进行转换,其中,第二转义字符还可以包括转义结束字符。
按照第一编码与第二编码的标准对转义字符进行转换为现有技术中存在的正常查表转换。
步骤202之后还可以包括,若所述字节信息中存在双字节字符,按照第一编码与第二编码的标准进行转换。
由此,通过本实施例的生僻字的编码扩展方法,通过当单字节字符是第二转义字符,且所述第二转义字符后的字节编码序列为符合约定格式的转义序列时,则将所述转义序列转义还原为与第二编码以及第一编码对应格式的字节编码序列,可以实现基于小字符集(如GBK或EBCDIC CCSID 1388)的编码空间进行扩展以表示生僻字的方法及对应的转码工具或组件,解决现有各小字符集编码的系统官方技术难以表示、存储、传输生僻字的问题。
避免了在实际的应用过程中大字符集系统与小字符集系统对接转换时造成超出小字符集的生僻字丢失的问题,使得包含生僻字姓名的人员可以得到正常的服务。
具体的,以下通过举例来描述本实施例的转义算法。
图3为GBK的单字节块和双字节块的编码范围结构示意图,GBK编码的字符由单字节字符(附图3中单字节块编码范围0x00-0x7F,同ASCII编码)和双字节字符组成,双字节的第1字节编码范围0x81-0xFE,第2字节范围为0x40-0x7E和0x80-0xFE(即剔除0x7F一条线)。很多系统程序使用GBK编码时将会检测上述编码范围,不符合的将报错或显示为问号等替代字符。因此GBK的扩展不能使用上述编码空间里的空白区域,而需使用多个GBK的合法字符序列表示一个GB18030的4字节字符或UTF8的2-4字节字符。
本实施例可以通过参考反斜杠加字母的转义方式表示特殊字符(如\r表示回车,\n表示换行,\\表示反斜杠本身)的方法,我们可以使用一个或几个特殊字符序列作为转义开始字符,紧接生僻字的16进制Unicode编码的字节编码序列(定长或变长),后跟一个表示转义结束的字符(如果生僻字编码为定长也可不跟结束字符)。
例如,图6为本实施例生僻字的编码扩展方法的一种实现方式的多系统之间对接的结构示意图,根据图6中给出的示例,可规定反斜杠加生僻字的5位16进制Unicode编码(不足5位则左补0)表示该生僻字,示例“\2CC56”(6个字节的可见字符,16进制GBK编码5C32 43 43 35 36)表示(“由页”这个字,16进制GB18030编码是99 33C3 36,4个字节),同样规定“\\”表示一个反斜杠本身,此法为平均长度最短的方案,由于为定长方案,程序判断和处理的效率最高。此方法理论上可表示所有目前已定义的Unicode字符,即包括GBK之内的非生僻字,但系统改造前的存量数据若有反斜杠,则极易导致误判为生僻字转义表示,为此可规定转义序列只能表示GBK之外的生僻字,或者对存量数据中的反斜杠进行数据治理,每个反斜杠变为两个。
又如,如果反斜杠在相关应用系统有其它特殊用途(如已定义为字段分隔符),则可改用多个转义字符的方案,例如反引号(`)加H开头再跟5位16进制Unicode编码(不足5位则左补0,如“`H2CC56”)或者反引号(`)开头再跟5位16进制Unicode编码(不足5位则左补0)最后跟H结束(如“`2CC56H”,此法因有结束符,因此中间16进制Unicode编码也可以不规定为定长5位,但支持变长的程序逻辑略复杂)。如果要使用反引号(`)本身,可规定反引号(`)与H间加插入一个空格。
此法为平均长度较短的方案,若规定16进制Unicode编码为定长方案,则程序判断和处理的效率最高。为减少系统改造前的存量数据与转义字符序列冲突而误判,可规定转义序列只能表示GBK之外的生僻字,或者对存量数据中的转义字符进行数据治理,插入空格等不影响阅读或判断的字符。
当第二编码为EBCDIC CCSID 1388时,可以通过两种方法实现。
方案一,图4为EBCDIC CCSID 1388的编码范围结构示意图,CCSID 1388编码的由单字节字符(图4单字节块编码范围0x00-0xFF,部分码位未定义字符,且与ASCII编码几乎完全不同)和双字节字符组成,其中单字节0x0E表示一组双字节字符的开始,0x0F表示一组双字节字符的结束。双字节除了特殊字符(全角空格)0x4040外,第1字节编码范围已使用的为0x41-0xFC,第2字节范围已使用的为0x41-0xFE。目前,IBM并未扩充CCSID 1388的编码方案以完整支持GB18030或Unicode的全部字符。IBM的jt400.jar包和iconv函数对于上述编码空间里的空白区域的编码转码为GB18030时均转为0x8431A437(代表问号的替代字符)。
和前述GBK扩展编码方案类似,使用一个或几个特殊字符序列作为转义开始字符,紧接生僻字的16进制Unicode编码(定长或变长的EBCDIC编码字符串),后跟一个表示转义结束的字符(如果生僻字编码为定长也可不跟结束字符)。注意一组汉字中间的生僻字,转义方式表示时,需要有前一组双字节的结束符0x0F,然后是转义表示的6-7字节(转义符1-2个字符且生僻字采用5位定长16进制Unicode编码的话),再其后是后一组双字节的开始符0x0E,即一组汉字中间的一个生僻字,用此方案需要8-9字节的空间。
方案二,上述转义序列方案因EBCDIC每组双字节需要0x0E/0x0F作为开始/结束符的特性导致生僻字转义序列的表示占用空间较多,如果一个数据字段中间隔出现多个生僻字,则转义表示的结果可能超过应用系统定义数据库字段的长度,而数据库字段扩大长度将导致改造成本显著增大。借鉴UTF16编码方案,即在Unicode的第一个平面(BMP,UCS2编码)空间借用两组代理对(Surrogate pair)可表示1024×1024=1048576个编码的思想,我们在EBCDIC CCSID 1388编码的空间里定义两块未被IBM使用且不重叠(也可以重叠,重叠的缺点是传输丢失部分信息后可能导致后续字节全部被认为是乱码)的区域分别作为高位代理和低位代理,图5为本实施例所提供的EBCDIC CCSID 1388的方案二的编码范围结构示意图,如图5所示,可规定代理区1作为高位代理,代理区2作为低位代理;或者代理区3作为高位代理,代理区4作为低位代理;或者选用其它的空闲区域(其实不要求是正方形或长方形,也不要求互不重叠,只不过重叠的方案会导致异常情况分不清高位代理和低位代理)。下面简称方案二这种对EBCDIC CCSID 1388小字符集编码的扩展为1388EXT。
图5的代理区1第1字节范围0xC0-0xFE,第2字节0x10-0x1F,代理区2第1字节0x80-0xBF,第2字节0x10-0x1F,可表示1008×1024个编码。代理区3第1字节0x10-0x1F,第2字节0xC0-0xFE,代理区4第1字节0x10-0x1F,第2字节0x80-0xBF,也可表示1008×1024个编码(虽然比UTF16代理对表示的空间略小,但应该相当长的时间内都够用)。不使用0x20-0x3F区间的字节是因为有些界面程序使用它们表示颜色编码,以避免冲突。本方案在一组汉字中间的一个生僻字只需要4字节的空间就可以表示,可最大可能节约存储空间。但缺点是IBM官方的所有程序均不支持(显示界面都显示为空白,看不出不同生僻字的差异;转码程序全部需要重写,而方案1中IBM官方转码程序仍可使用,还原生僻字为大字符集编码只需后续处理转义还原即可)
以下在进行转义时,将转义字符定义为第一转义字符,在进行转义还原时,将转义字符定义为第二转义字符。
当第一编码为GB18030,第二编码为GBK时,GB18030到GBK的转义包括:逐字节判断输入,如果是单字节字符,判断是否第一转义字符本身,若是则进行相关转换(如一个反斜杠变为两个),否则正常转换;如果是GBK双字节字符,正常转换;如果是4字节字符,查表或计算得到其Unicode编码,用转义表示。
当第一编码为UTF8,第二编码为GBK时,UTF8到GBK的转义:逐字节判断输入,如果是单字节字符,判断是否是第一转义字符本身,若是则进行相关转换(如一个反斜杠变为两个),否则正常转换;如果是2-4字节字符,得到其Unicode编码,查表或计算得到其GB18030编码,若为GBK的2字节编码,照常转换,否则改用转义表示。
第一种EBCDIC CCSID 1388编码扩展方案的实现方法:
当第一编码为GB18030,GB18030到EBCDIC CCSID 1388的转义:逐字节判断输入,如果是单字节字符,判断是否第一转义字符本身,若是则进行相关查表转换(如一个反斜杠变为两个),否则正常查表转换;如果是GBK双字节字符,正常查表转换;如果是4字节字符,查表或计算得到其Unicode编码,改用转义表示并查表转换。
当第一编码为UTF8,UTF8到EBCDIC CCSID 1388的转义:逐字节判断输入,如果是单字节字符,判断是否第一转义字符本身,若是则进行相关查表转换(如一个反斜杠变为两个),否则正常查表转换;如果是2-4字节字符,得到其Unicode编码,查表或计算得到其GB18030编码,若为GBK的2字节编码,照常查表转换,否则改用转义表示并查表转换。
第二种EBCDIC CCSID 1388编码扩展方案的实现方法:
当第一编码为GB18030,GB18030到1388EXT的转码:逐字节判断输入,如果是单字节字符,正常查表转换;如果是GBK双字节字符,正常查表转换;如果是4字节字符,查表或计算得到其Unicode编码,按前述方案2的映射方法得到代理对的4个字节。
当第一编码为UTF8,UTF8到1388EXT的转码:逐字节判断输入,如果是单字节字符,正常查表转换;如果是2-4字节字符,得到其Unicode编码,查表或计算得到其GB18030编码,若为GBK的2字节编码,照常查表转换,否则按前述方案2的映射方法得到代理对的4个字节。
以下是具体实现第二编码到第一编码的还原方法。
GBK到GB18030的转义还原方法包括:逐字节判断输入,如果是单字节字符,判断是否第二转义字符开头且其后是符合约定格式的转义序列,若是则得到Unicode编码,查表或计算得到其GB18030编码,进行还原,否则认为是第二转义字符本身而正常转换;如果是GBK双字节字符,正常转换。
GBK到UTF8的转义还原方法包括:逐字节判断输入,如果是单字节字符,判断是否第二转义字符开头且其后是符合约定格式的转义序列,若是则得到Unicode编码,转换为UTF8编码字节进行还原,否则认为是第二转义字符本身而正常转换;如果是GBK双字节字符,查表得到其Unicode编码,再转换为UTF8编码字节。
第一种EBCDIC CCSID 1388编码扩展方案转义还原的实现方法:
EBCDIC CCSID 1388到GB18030的转义还原方法包括:逐字节判断输入,遇到0x0E为进入双字节状态,遇到0x0F则退出双字节状态;如果是单字节字符,判断是否是第二转义字符开头且其后是符合约定格式的转义序列,若是则得到Unicode编码,查表或计算得到其GB18030编码,进行还原,否则认为是第二转义字符本身而正常查表转换;如果是双字节字符,正常查表转换。
EBCDIC CCSID 1388到UTF8的转义还原方法包括:逐字节判断输入,遇到0x0E为进入双字节状态,遇到0x0F则退出双字节状态;如果是单字节字符,判断是否是第二转义字符开头且其后是符合约定格式的转义序列,若是则得到Unicode编码,转换为UTF8编码字节进行还原,否则认为是第二转义字符本身而正常查表转换;如果是双字节字符,查表得到其Unicode编码,再转换为UTF8编码字节。
第二种EBCDIC CCSID 1388编码扩展方案转义还原的实现方法:
1388EXT到GB18030的转码方法包括:逐字节判断输入,遇到0x0E为进入双字节状态,遇到0x0F则退出双字节状态;如果是单字节字符,正常查表转换;如果是双字节字符,正常查表转换;如果是4字节代理对,按前述方案2的从代理对编码到Unicode编码的还原方法得到Unicode编码,再查表或计算得到其GB18030编码。
1388EXT到UTF8的转码方法包括:逐字节判断输入,遇到0x0E为进入双字节状态,遇到0x0F则退出双字节状态;如果是单字节字符,正常查表转换;如果是双字节字符,查表得到其Unicode编码,再转换为UTF8编码字节;如果是4字节代理对,按前述方案2的从代理对编码到Unicode编码的还原方法得到Unicode编码,再转换为UTF8编码字节。
本实施例中,单字节字符、双字节字符、4字节字符这样的说法,是指用1个、2个或4个字节编码序列表示的字符。
图6为本实施例的一种实现方式的多系统之间对接的结构示意图,以下根据图6对本实施例进行详细描述。
假设银行柜面(渠道,发送方)系统A的开户交易发往中间系统(交换平台,传输方)B再转码后转发给后台核心系统C(处理方),A、B系统内部目前均采用GBK编码,A与B系统间接口也采用GBK编码,C内部及B与C系统间接口采用EBCDIC CCSID 1388编码。为实施生僻字支持的改造,假设决定改造A与C系统,而B系统暂不改造,系统间接口保留不变。A系统购买并安装输入法和字库,内部编码升级为GB18030,于是应用改造后,生僻字可输入、可显示、可表示和存储。例如输入“张三”,GB18030的16进制编码为:D5 C5 99 33 C3 36 C8 FD。第2个字是生僻字(GB18030的4字节“99 33 C3 36”汉字)。
由于A与B系统间接口采用GBK编码不变,于是A调用本发明的转码工具(假设采用反斜杠作为生僻字的转义符),将GB18030生僻字转为转义表示发往B系统。上面的例子:GB18030->GBK,生僻字转义表示(字的Unicode编码16进制为2CC56),得到“张\2CC56三”,GBK的16进制内码为:D5 C5 5C 32 43 43 35 36 C8 FD(一个生僻字由GB18030的4字节“99 33 C3 36”转换为GBK的6字节“5C 32 43 43 35 36”可见字符“\2CC56”)
D5 C5 99 33 C3 36 C8 FD 2C 31 5C 41
处理流程包括:
第1字节D5,为0x81~0xFE范围,所以是2字节或4字节的开头;第2字节:C5,为在0x40~0xFE且不等于0x7F范围:所以这两个字节属于GBK汉字,不是生僻字,D5C5直接写入GBK编码的输出。第3字节:99,为0x81~0xFE范围,所以是2字节或4字节的开头,第4、5、6字节,满足GB18030的4字节汉字编码范围,属于生僻字。99 33 C3 36的对应Unicode 16进制编码为2CC56,前面加个反斜杠共6个字节“5C 32 43 43 35 36”即转义形式写入GBK编码的输出。C8 FD,属于GBK汉字,不是生僻字,C8 FD直接写入GBK编码的输出。2C是普通半角字符(在0x00~0x7F范围),直接写入GBK编码的输出。31,一样。5C即反斜杠本身,得转成两个,即5C 5C写入GBK编码的输出。41是普通半角字符,直接写入GBK编码的输出。最后得到输出结果(一共15个字节):D5 C5 5C 32 43 43 35 36 C8 FD 2C 31 5C 5C 41。按字符串显示,就是“张\2CC56三,1\\A”。
B系统不改造,将包含转义表示生僻字的GBK请求报文正常转码为EBCDIC CCSID1388编码发往后台核心系统C。上面的例子:“张\2CC56三”GBK 16进制内码为:D5 C5 5C 3243 43 35 36C8 FD都是合法GBK字符,A->B透传不报错,即生僻字以变通方式穿过B系统。如果生僻字不转义,B系统收到A系统发来的字GB18030的4字节“99 33 C3 36”,检测到“99 33”违反GBK编码规则,就可能报错了。
B系统内部处理完毕,出去转发给C系统时按原来方式正常转码为EBCDIC CCSID1388编码,GBK->EBCDIC CCSID 1388,生僻字转义表示,得到“张\2CC56三”的EBCDIC CCSID1388编码,16进制内码为:0E 5B 65 0F B2 F2 C3 C3 F5 F6 0E 54 FC 0F。这些都是合法EBCDIC CCSID 1388字符,B->C透传,B和C系统都不报错。
后台核心系统C数据库编码假设由EBCDIC CCSID 1388编码升级为UTF8编码,收到EBCDIC CCSID 1388编码请求报文后,改造后的系统调用本发明的转码工具,将其中转义表示的生僻字还原并转码为UTF8编码,然后进行交易处理并保存数据库。上面的例子:EBCDICCCSID 1388->UTF8,生僻字转义还原,得到“张三”的UTF8编码,16进制内码为:E5 BC A0F0 AC B1 96 E4 B8 89(中间F0 AC B1 96这4字节是字的UTF8编码)。
C系统处理完毕,生成交易回应发回B系统,其中涉及生僻字则调用本发明的转码工具转为EBCDIC CCSID 1388编码中的转义表示。
B系统不改造,将包含转义表示生僻字的EBCDIC CCSID 1388编码回应报文正常转码为包含转义表示生僻字的GBK报文发回A系统。
A系统调用本发明的转码工具,将包含转义表示生僻字的GBK回应报文还原并转码为GB18030,于是回应结果中的生僻字可正常显示。如果打印机升级,也可正确打印生僻字。
具体的,GBK到GB18030转义还原的流程:
拿上面的结果“张\2CC56三,1\\A”作为输入,一共15个字节(16进制表示,这里省略0x,用空格分隔每个字节):
D5 C5 5C 32 43 43 35 36 C8 FD 2C 31 5C 5C 41
处理流程包括:
第1字节:D5,为0x81~0xFE范围,所以是2字节或4字节的开头,第2字节:C5,为在0x40~0xFE且不等于0x7F范围:所以这两个字节属于GBK汉字,D5C5直接写入GB18030编码的输出。第3字节:5C,是我们规定的转义引导字符,再看后面的5个字符,满足我们规定的5位16进制数的格式(每一个都是0-9或A-F字符,即字节16进制是30-39或41-46),这5位的16进制数2CC56对应GB18030的99 33 C3 36,把这4字节写入GB18030编码的输出。C8 FD,属于GBK汉字,C8 FD直接写入GB18030编码的输出。2C是普通半角字符(在0x00~0x7F范围),直接写入GB18030编码的输出。31,一样。5C,是我们规定的转义引导字符,再看后面的5个字符,不满足我们规定的5位16进制数的格式,而是满足另一个规定,即两个反斜杠的转义代表一个反斜杠字符本身,即5C,5C变回1个5C写入GB18030编码的输出。41是普通半角字符,直接写入GB18030编码的输出。最后得到输出结果(一共12个字节):D5 C5 99 33 C3 36 C8FD 2C 31 5C 41按字符串显示,就是“张三,1\A”。
由上面的例子可见,一个组织内部的传输方中间系统即使不改造,只要一头(前端接入、发送)一尾(后端处理)的系统能支持生僻字,采用本发明的编码扩展方法和转码工具,也能够完成生僻字支持的系统改造,因此可减少改造的系统数量,特别是当中间系统较多时可节约整体改造成本。
本实施例中提供的方法可以应用在渠道系统A与中间系统B之间的转换,也可以应用在中间系统B与后台系统C之间的转换。具体的,步骤101-107实现的是上述三个系统间大字符集对小字符集的转换,即渠道系统A支持大字符集,中间系统B支持小字符集,在渠道系统A向中间系统B传输数据的时候,需要使用步骤101-107的方法进行生僻字的转义。在中间系统B向后台系统C传输数据的时候,需要使用步骤201-207的方法进行生僻字的还原。
本发明实施例还提供了一种生僻字的编码扩展装置的结构示意图,参见图7所示,包括:第一获取模块11、第一转换模块12、第一判断模块13以及转义模块14。
第一获取模块11,用于获取第一输入信息、当前支持的第一编码以及待转换的第二编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
第一转换模块12,用于将所述第一输入信息转换为第一编码的字节信息;
第一判断模块13,用于判断所述字节信息中是否包括生僻字的字节编码序列;
转义模块14,用于在所述字节信息包括所述生僻字的字节编码序列时,将所述生僻字的字节编码序列转义为与第一编码以及第二编码约定格式对应的转义序列进行表示。
本实施例中的装置用于实现上述实施例中的步骤101-107,详细描述请参阅前述步骤的描述,本实施例在此不再赘述。
由此,通过本实施例的生僻字的编码扩展方法,通过检查字节信息中是否包括对应合法的GB18030编码的字节编码序列表示的字符来判断所述字节信息中是否包括生僻字,若包括生僻字,则将生僻字的字节编码序列转义为小字符集(如GBK或EBCDIC CCSID1388)范围的转义序列进行表示以便存储、和传输,可以实现基于小字符集的编码空间进行扩展以表示生僻字的方法及对应的转码工具或组件,解决现有各小字符集编码的系统官方技术难以表示、存储、传输生僻字的问题。
本发明实施例还提供了一种生僻字的编码扩展装置的结构示意图,参见图8所示,包括:第二获取模块21、第二转换模块22、第二判断模块23以及还原模块24。
第二获取模块21,用于获取第二输入信息、当前支持的第二编码以及待转换的第一编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
第二转换模块22,用于将所述第二输入信息转换为第二编码的字节信息;
第二判断模块23,用于在所述字节信息中存在单字节字符时,判断所述单字节字符是否为第二转义字符;
还原模块24,用于在所述单字节字符是第二转义字符,且所述第二转义字符后的字节编码序列为符合约定格式的转义序列时,将所述转义序列转义还原为与第二编码以及第一编码对应格式的字节编码序列。
本实施例中的装置用于实现上述实施例中的步骤201-207,详细描述请参阅前述步骤的描述,本实施例在此不再赘述。
由此,通过本实施例的生僻字的编码扩展装置,通过当单字节字符是第二转义字符,且所述第二转义字符后的字节编码序列为符合约定格式的转义序列时,则将所述转义序列转义还原为与第二编码以及第一编码对应格式的字节编码序列,可以实现基于小字符集(如GBK或EBCDIC CCSID 1388)的编码空间进行扩展以表示生僻字的方法及对应的转码工具或组件,解决现有各小字符集编码的系统官方技术难以表示、存储、传输生僻字的问题。
本发明实施例还提供了一种存储介质,所述存储介质存储有计算机可执行指令,其包含用于执行上述生僻字的编码扩展方法的程序,该计算机可执行指令可执行上述任意方法实施例中的方法。
其中,所述存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(SSD))等。
图9示出了本发明的另一个实施例的一种电子设备的结构框图。所述电子设备1100可以是具备计算能力的主机服务器、个人计算机PC、或者可携带的便携式计算机或终端等。本发明具体实施例并不对电子设备的具体实现做限定。
该电子设备1100包括至少一个处理器(processor)1110、通信接口(Communications Interface)1120、存储器(memory array)1130和总线1140。其中,处理器1110、通信接口1120、以及存储器1130通过总线1140完成相互间的通信。
通信接口1120用于与网元通信,其中网元包括例如虚拟机管理中心、共享存储等。
处理器1110用于执行程序。处理器1110可能是一个中央处理器CPU,或者是专用集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器1130用于可执行的指令。存储器1130可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1130也可以是存储器阵列。存储器1130还可能被分块,并且所述块可按一定的规则组合成虚拟卷。存储器1130存储的指令可被处理器1110执行,以使处理器1110能够执行上述任意方法实施例中的生僻字的编码扩展方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (11)
1.一种生僻字的编码扩展方法,其特征在于,包括:
获取第一输入信息、当前支持的第一编码以及待转换的第二编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
将所述第一输入信息转换为第一编码的字节信息;
若所述字节信息中包括单字节字符,则判断所述单字节字符是否为第一转义字符,其中,所述第一转义字符包括转义开始字符;
若所述单字节字符是所述第一转义字符,则按照预设方式对所述第一转义字符进行转换;
若所述单字节字符不是所述第一转义字符,则按照第一编码与第二编码的标准进行转换;
判断所述字节信息中是否包括生僻字的字节编码序列;
若所述字节信息中包括所述生僻字的字节编码序列,则将所述生僻字的字节编码序列转义为与第一编码以及第二编码约定格式对应的转义序列进行表示;
当第二编码为EBCDIC时,所述与第一编码以及第二编码约定格式对应的转义序列包括:
与所述生僻字的Unicode编码对应的4字节代理对,其中,所述4字节代理对包括第1字节b1、第2字节b2、第3字节b3以及第4字节b4;
第1字节b1=m1+0xC0;
第2字节b2=m2+0x10;
第3字节b3=m3+0x80;
第4字节b4=n3+0x10;
若U=所述生僻字的16进制Unicode编码值,则m1=U/16384取整,n1=U%16384,m2=n1/1024取整,n2=n1%1024,m3=n2/16取整,n3=n2%16。
2.根据权利要求1所述的编码扩展方法,其特征在于,判断所述字节信息中是否包括生僻字的字节编码序列包括:
当第一编码为GB18030编码时,若字节信息中存在合法的4字节编码序列表示的字符,则判断为包括生僻字的字节编码序列。
3.根据权利要求1所述的编码扩展方法,其特征在于,判断所述字节信息中是否包括生僻字的字节编码序列包括:
当第一编码为UTF8时,若字节信息中存在合法的2-4字节编码序列表示的字符,则获取该字节编码序列表示字符的Unicode编码;
根据获取的Unicode编码查表或计算得到该字符的GB18030编码;
若为合法的GB18030编码的4字节编码序列表示的字符,则判断为包括生僻字的字节编码序列。
4.根据权利要求1所述的编码扩展方法,其特征在于,所述与第一编码以及第二编码约定格式对应的转义序列包括:
转义开始字符的字节编码序列以及固定长度的与所述生僻字的字节编码序列对应的16进制Unicode编码的字节编码序列。
5.根据权利要求1所述的编码扩展方法,其特征在于,所述与第一编码以及第二编码约定格式对应的转义序列包括:
转义开始字符的字节编码序列、与所述生僻字的字节编码序列对应的16进制Unicode编码的字节编码序列以及转义结束的字符的字节编码序列,其中所述生僻字的16进制Unicode编码的字节编码序列为变长。
6.一种生僻字的编码扩展装置,其特征在于,包括:
第一获取模块,用于获取第一输入信息、当前支持的第一编码以及待转换的第二编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
第一转换模块,用于将所述第一输入信息转换为第一编码的字节信息;若所述字节信息中包括单字节字符,则判断所述单字节字符是否为第一转义字符,其中,所述第一转义字符包括转义开始字符;若所述单字节字符是所述第一转义字符,则按照预设方式对所述第一转义字符进行转换;若所述单字节字符不是所述第一转义字符,则按照第一编码与第二编码的标准进行转换;
第一判断模块,用于判断所述字节信息中是否包括生僻字的字节编码序列;
转义模块,用于在所述字节信息包括所述生僻字的字节编码序列时,将所述生僻字的字节编码序列转义为与第一编码以及第二编码约定格式对应的转义序列进行表示;当第二编码为EBCDIC时,所述与第一编码以及第二编码约定格式对应的转义序列包括:
与所述生僻字的Unicode编码对应的4字节代理对,其中,所述4字节代理对包括第1字节b1、第2字节b2、第3字节b3以及第4字节b4;
第1字节b1=m1+0xC0;
第2字节b2=m2+0x10;
第3字节b3=m3+0x80;
第4字节b4=n3+0x10;
若U=所述生僻字的16进制Unicode编码值,则m1=U/16384取整,n1=U%16384,m2=n1/1024取整,n2=n1%1024,m3=n2/16取整,n3=n2%16。
7.一种生僻字的编码扩展方法,其特征在于,包括:
获取第二输入信息、当前支持的第二编码以及待转换的第一编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
将所述第二输入信息转换为第二编码的字节信息;
当第二编码为EBCDIC时,将所述第二输入信息转换为第二编码的字节信息之后还包括:
若所述字节信息中包括4字节代理对,则获取所述4字节代理对代表的Unicode编码;
根据所述4字节代理对代表的Unicode编码得到与第一编码对应的字节编码序列进行转义还原;
所述获取所述4字节代理对代表的Unicode编码包括:
根据公式一计算4字节代理对代表的Unicode编码,所述公式一包括:
Unicode编码=(b1-0xC0)*16384+(b2-0x10)*1024+(b3-0x80)*16+b4-0x10;
其中,b1、b2、b3、b4为代理对的四个字节;
若所述字节信息中包括单字节字符,则判断所述单字节字符是否为第二转义字符;
若所述单字节字符是所述第二转义字符,且所述第二转义字符后的字节编码序列为符合约定格式的转义序列,则将所述转义序列转义还原为与第二编码以及第一编码对应格式的字节编码序列;
若所述单字节字符是所述第二转义字符,且所述第二转义字符后的字节编码序列不是符合约定格式的转义序列,则按照第一编码与第二编码的标准对所述第二转义字符进行转换,其中,所述第二转义字符包括转义开始字符。
8.根据权利要求7所述的编码扩展方法,其特征在于,将所述转义序列转义还原为与第二编码以及第一编码对应格式的字节编码序列包括:
获取所述转义序列代表的Unicode编码;
根据所述转义序列代表的Unicode编码得到与第一编码对应的字节编码序列进行转义还原。
9.一种生僻字的编码扩展装置,其特征在于,包括:
第二获取模块,用于获取第二输入信息、当前支持的第二编码以及待转换的第一编码,其中,第一编码为大字符集编码,第二编码为小字符集编码;
第二转换模块,用于将所述第二输入信息转换为第二编码的字节信息;当第二编码为EBCDIC时,将所述第二输入信息转换为第二编码的字节信息之后还包括:
若所述字节信息中包括4字节代理对,则获取所述4字节代理对代表的Unicode编码;
根据所述4字节代理对代表的Unicode编码得到与第一编码对应的字节编码序列进行转义还原;
所述获取所述4字节代理对代表的Unicode编码包括:
根据公式一计算4字节代理对代表的Unicode编码,所述公式一包括:
Unicode编码=(b1-0xC0)*16384+(b2-0x10)*1024+(b3-0x80)*16+b4-0x10;
其中,b1、b2、b3、b4为代理对的四个字节;
第二判断模块,用于在所述字节信息中包括单字节字符时,判断所述单字节字符是否为第二转义字符;
还原模块,用于在所述单字节字符是第二转义字符,且所述第二转义字符后的字节编码序列为符合约定格式的转义序列时,将所述转义序列转义还原为与第二编码以及第一编码对应格式的字节编码序列;若所述单字节字符是所述第二转义字符,且所述第二转义字符后的字节编码序列不是符合约定格式的转义序列,则按照第一编码与第二编码的标准对所述第二转义字符进行转换,其中,所述第二转义字符包括转义开始字符。
10.一种存储介质,其特征在于,所述存储介质存储有计算机可执行指令,所述计算机可执行指令用于执行权利要求1-5任意一项所述的生僻字的编码扩展方法,或者,用于执行权利要求7-8任意一项所述的生僻字的编码扩展方法。
11.一种电子设备,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-5任意一项所述的生僻字的编码扩展方法,或者,能够执行权利要求7-8任意一项所述的生僻字的编码扩展方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010335864.4A CN111444680B (zh) | 2020-04-25 | 2020-04-25 | 生僻字的编码扩展方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010335864.4A CN111444680B (zh) | 2020-04-25 | 2020-04-25 | 生僻字的编码扩展方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111444680A CN111444680A (zh) | 2020-07-24 |
CN111444680B true CN111444680B (zh) | 2023-05-16 |
Family
ID=71653453
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010335864.4A Active CN111444680B (zh) | 2020-04-25 | 2020-04-25 | 生僻字的编码扩展方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111444680B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112486428B (zh) * | 2020-11-18 | 2024-08-02 | 中信银行股份有限公司 | 打印方法、装置及存储介质 |
CN112732948B (zh) * | 2021-01-12 | 2024-05-17 | 中信银行股份有限公司 | 身份验证方法、装置及存储介质 |
CN113296614B (zh) * | 2021-06-18 | 2024-10-01 | 中国农业银行股份有限公司 | 生僻汉字的显示方法、装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103399843A (zh) * | 2013-08-20 | 2013-11-20 | 烽火通信科技股份有限公司 | 一种Linux VFAT文件系统模块支持GB18030字符集的方法 |
CN103914436A (zh) * | 2013-01-09 | 2014-07-09 | 国际商业机器公司 | 提供较小目标编码空间的码转换方法、计算机装置和程序产品 |
CN105243168A (zh) * | 2015-11-11 | 2016-01-13 | 中国建设银行股份有限公司 | 一种数据迁移方法及系统 |
WO2016197265A1 (zh) * | 2015-06-11 | 2016-12-15 | 周连惠 | 一种输入生僻字的方法 |
CN106484661A (zh) * | 2015-08-25 | 2017-03-08 | 北京郑码世纪信息技术有限公司 | 一种ebcdic编码扩展的方法 |
CN110413810A (zh) * | 2019-07-31 | 2019-11-05 | 中国工商银行股份有限公司 | 生僻字处理方法及系统 |
CN111046631A (zh) * | 2019-10-16 | 2020-04-21 | 平安科技(深圳)有限公司 | 基于字符转换的姓名存储方法、装置、计算机设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW201339861A (zh) * | 2012-03-30 | 2013-10-01 | Ibm | 提供較小目標編碼空間之碼轉換的方法、電腦裝置與程式產品 |
-
2020
- 2020-04-25 CN CN202010335864.4A patent/CN111444680B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103914436A (zh) * | 2013-01-09 | 2014-07-09 | 国际商业机器公司 | 提供较小目标编码空间的码转换方法、计算机装置和程序产品 |
CN103399843A (zh) * | 2013-08-20 | 2013-11-20 | 烽火通信科技股份有限公司 | 一种Linux VFAT文件系统模块支持GB18030字符集的方法 |
WO2016197265A1 (zh) * | 2015-06-11 | 2016-12-15 | 周连惠 | 一种输入生僻字的方法 |
CN106484661A (zh) * | 2015-08-25 | 2017-03-08 | 北京郑码世纪信息技术有限公司 | 一种ebcdic编码扩展的方法 |
CN105243168A (zh) * | 2015-11-11 | 2016-01-13 | 中国建设银行股份有限公司 | 一种数据迁移方法及系统 |
CN110413810A (zh) * | 2019-07-31 | 2019-11-05 | 中国工商银行股份有限公司 | 生僻字处理方法及系统 |
CN111046631A (zh) * | 2019-10-16 | 2020-04-21 | 平安科技(深圳)有限公司 | 基于字符转换的姓名存储方法、装置、计算机设备 |
Non-Patent Citations (2)
Title |
---|
姓名生僻字的银行标准化实践和建议;纪熙东 李言平;《第十六届中国标准化论坛论文集Proceedings of the 16th China Standardization Forum中国标准化协会会议论文集》;20191014;全文 * |
银行信息系统生僻汉字处理方法;毛淑平;《中国金融电脑》;20100515;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111444680A (zh) | 2020-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111444680B (zh) | 生僻字的编码扩展方法、装置、存储介质及电子设备 | |
CN111090628B (zh) | 一种数据处理方法、装置、存储介质及电子设备 | |
US7188115B2 (en) | Processing fixed-format data in a unicode environment | |
CN110597814B (zh) | 结构化数据的序列化、反序列化方法以及装置 | |
CN108921552B (zh) | 一种验证证据的方法及装置 | |
US20100088353A1 (en) | Migration Apparatus Which Convert Database of Mainframe System into Database of Open System and Method for Thereof | |
CN107919943A (zh) | 二进制数据的编码、解码方法和装置 | |
WO2024066271A1 (zh) | 数据库水印的嵌入方法、溯源方法、装置和电子设备 | |
CN111985491A (zh) | 基于深度学习的相似信息合并方法、装置、设备及介质 | |
CN115934730A (zh) | 数据处理方法和装置、介质和计算机设备 | |
CN101611419B (zh) | 用于创建代码网格并且将其向便携式通信设备发送的方法和装置 | |
CN108734149A (zh) | 一种文本数据扫描方法和装置 | |
US6313763B1 (en) | Variable length data packet with adjustable length indicator | |
US20100042640A1 (en) | Migration Apparatus Which Convert SAM/VSAM Files of Mainframe System into SAM/VSAM Files of Open System and Method for Thereof | |
CN103399864A (zh) | 一种图片转换方法及装置 | |
CN108052842A (zh) | 签名数据的存储、验证方法及装置 | |
CN114595795A (zh) | 一种nfc标签的溯源数据处理方法 | |
CN113536782A (zh) | 敏感词识别方法、装置、电子设备及存储介质 | |
CN111064560B (zh) | 数据加密传输方法及装置、终端、数据加密传输系统 | |
JP4721012B2 (ja) | 文字列格納システム、文字列格納装置、文字列格納方法及びプログラム | |
CN110852083A (zh) | 一种短信模板的生成方法及装置 | |
CN114691605B (zh) | 一种dbc信号起始位格式转换方法及系统 | |
CN118036045A (zh) | 标识生成方法、装置及计算机设备、存储介质、程序产品 | |
CN113283215B (zh) | 一种基于utf-32编码的数据混淆方法及装置 | |
WO2024021667A1 (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 |