CN109871520B - 一种适用于http内容内嵌的二进制数据编解码方法 - Google Patents
一种适用于http内容内嵌的二进制数据编解码方法 Download PDFInfo
- Publication number
- CN109871520B CN109871520B CN201910150190.8A CN201910150190A CN109871520B CN 109871520 B CN109871520 B CN 109871520B CN 201910150190 A CN201910150190 A CN 201910150190A CN 109871520 B CN109871520 B CN 109871520B
- Authority
- CN
- China
- Prior art keywords
- data
- binary data
- byte
- binary
- characters
- 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
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提出了一种适用于HTTP内容内嵌的二进制数据编解码方法,属于计算机数据处理技术领域。本方法在HTTP传输二进制数据时,将读取到的原始文件的二进制数据分组转换为单字节UTF‑8字符,如果单字节UTF‑8字符为不可打印的无效字符,则将其与后一字节数据合并转化为双字节UTF‑8字符,然后将转换后的UTF‑8字符串作为内容内嵌替换原始的内容链接部分。本方法对比现有技术,有效利用了UTF‑8编码的可见字符,将二进制数据转换为UTF‑8单字节字符和双字节字符表示,扩展了二进制数据的字符表现范围,提高了二进制数据编码效率,编码后的字符数据仅为原始二进制数据的1.143倍。在网络数据传输中能够有效降低带宽,提高传输效率。
Description
技术领域
本发明涉及一种二进制数据编码与解码方法,特别涉及一种适用于HTTP内容内嵌的二进制数据编解码方法,属于计算机数据处理技术领域。
背景技术
HTTP作为一种超链接文本传输协议,在互联网中得到了广泛的应用。该协议只支持文本数据的传输,对于二进制文件数据,通常通过内容链接或内容内嵌的方法完成。内容链接的方法使用超链接记录其URL地址,这种方法需要对每个资源都分别进行请求,每次请求都要经历三次握手和慢启动,在高延迟的场景下对网页加载速度的影响较较大;内容内嵌的方法将二进制文件转换为文本内容直接嵌入到网页文本中,这种方法能够一次性加载所有的网页资源,减少了二进制资源重复申请的握手和慢启动次数,在文件数据较小时能够提高网页加载速度,具有良好的用户友好性。
将二进制数据转换为文本字符的过程称为二进制数据编码,相应地,将文本字符转换为二进制数据的过程称为二进制数据解码。常用的二进制数据编码方法是Base64编码算法,它使用64个打印字符表示原始二进制数据,把3字节的二进制数据编码为4字节的文本数据,编码后的长度是原始数据的1.33倍。由于Base64编码算法只使用了64个字符表示原始二进制数据,无法充分利用足够多的表示字符,导致编码后的数据空间膨胀过大,增加了网络数据的传输量。
发明内容
本发明的目的是为了解决现有HTTP内容内嵌的二进制编码方法存在的数据膨胀问题,提出一种适用于HTTP内容内嵌的二进制数据编解码方法,基本原理是:在HTTP传输二进制数据时,将读取到的原始文件的二进制数据分组转换为单字节UTF-8字符,如果单字节UTF-8字符为不可打印的无效字符,则将其与后一字节数据合并转化为双字节UTF-8字符,然后将转换后的UTF-8字符串作为内容内嵌替换原始的内容链接部分。
为实现上述目的,本发明采用以下技术手段:
一种适用于HTTP内容内嵌的二进制数据编解码方法,包括以下步骤:
步骤1:在网络服务器端,根据HTTP网页中的内容链接,遍历读取每个链接INNER对应的二进制文件;
步骤2:从输入二进制文件的数据流中,循环读取7个二进制字节,得到7组二进制数据,每组为8位比特;
步骤3:将得到的7组二进制数据进行重新分组,得到8组二进制字节,每组为7位比特;
步骤4:在得到的8组二进制数据前分别补“0”,补“0”后每组为8位比特,1个字节;
步骤5:对补“0”后的8组二进制数据,分别判断该组二进制数据对应的字节是否为有效的UTF-8字符,如果是,则转到步骤6,否则转到步骤7;
步骤6:将步骤5中的二进制数据作为UTF-8字符输出到字符串DATA中,该字符串为二进制数据转换后的字符串结果;
步骤7:将步骤5中的二进制数据与下一组二进制数据进行重新组合,组合后的前一字节数据的前3位为“110”,后一字节数据的前2位为“10”,剩余11位比特用于存储原始字节信息;
步骤8:将步骤7中的两组二进制数据作为UTF-8字符输出到该文件对应的转换字符串DATA中;
步骤9:将步骤2中的二进制数据流全部处理完之后,将转换字符串DATA以内容内嵌的方式替换原始HTML源码中的内容链接INNER;
步骤10:客户端接收到HTML源码后,遍历所有内容内嵌字符串DATA;
步骤11:循环读取DATA内容,每次读取8个字节;
步骤12:判断每个字节值是否大于192(0b1100000),如果为否,转到步骤13,否则转到步骤14;
步骤13:将每个字节对应的8位二进制数据删除第1位后,保留后7位比特数据,并输出到STREAM中;STREAM是一个输出对象,类型是二进制数据流;
步骤14:将该字节数据与下一字节数据组合处理,形成“110XXXXX10XXXXXX”格式的二进制数据,转化为两组二进制数据,共14位比特,并输出到STREAM中;
步骤15:客户端将STREAM解析为内容内嵌字符串DATA相应的二进制数据并在浏览器中渲染使用。
有益效果
本发明方法,对比现有技术,有效利用了UTF-8编码的可见字符集,将二进制数据转换为UTF-8单字节字符和双字节字符表示,扩展了二进制数据的字符表现范围,提高了二进制数据编码效率,编码后的字符数据仅为原始二进制数据的1.143倍。在网络数据传输中能够有效降低带宽,提高传输效率。
附图说明
图1是HTTP文档传输过程中二进制数据编码与解码的流程图。
图2是二进制数据编码(二进制字节数据转换为UTF-8字符)示意图。
图3是无效字符处理示意图。
图4是二进制数据解码(UTF-8字符转换为二进制数据)示意图。
具体实现方式
下面结合附图和实施例,对本发明方法做进一步详细说明。
实施例
UTF-8是UNICODE的一种变长度的编码表达方式。它以8位为单元对UNICODE原始码位进行编码,为了能与ASCII码兼容(ASCII为1个字节),当原始码位小于127时(小于1个字节),字节以“0”开头;当原始码位大于127时(高于1个字节),第一个字节的开头前几位表示该UTF-8字符串的长度,其余字节的头两个比特都均以“10”开头,如110xxxxx前三位的二进制表示这是个2字节的UNICODE字符;1110xxxx是个三字节的UNICODE字符,依此类推,UTF-8编码格式与不同码位范围之间的对照如表1所示:
表1 UTF-8编码格式与不同码位范围对比
码位 | UTF-8编码格式 | 总位数 | 码位数 | 利用率 |
0x00-0x7F | 0xxxxxxx | 8 | 7 | 8:7 |
0x80-0x7FF | 110xxxxx 10xxxxxx | 16 | 11 | 16:11 |
0x800-0xFFFF | 1110xxxx 10xxxxxx 10xxxxxx | 24 | 16 | 24:16 |
0x10000-0x10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 32 | 21 | 32:21 |
表1中,利用率代表码位数据存储的效率,1:1的效率表示所有位数均为码位,没有多余的控制位。对于UTF-8编码来说,码位范围为0-127(0x7F)的利用率最高,因此,本发明方法的核心,是将原始的二进制字节转换为0-127码位数据,并使用UTF-8格式编码表示。
一种适用于HTTP内容内嵌的二进制数据编码方法,如图1所示,包括以下步骤:
(1)循环读取原始二进制文件数据,每次取7个二进制字节;
(2)将第1个字节数据与0b11111110取交,然后右移1位,记为b1;
(3)将第1个字节数据与0b00000001取交,然后左移6位,设为2a;将第2个字节数据与0b11111100取交,然后右移2位,设为2b,将2a和2b取并,记为b2;
(4)将第2个字节数据与0b00000011取交,然后左移5位,设为3a;将第3个字节数据与0b11111000取交,然后右移3位,设为3b,将3a和3b取并,记为b3;
(5)将第3个字节数据与0b00000111取交,然后左移4位,设为4a;将第4个字节数据与0b11110000取交,然后右移4位,设为4b,将4a和4b取并,记为b4;
(6)将第4个字节数据与0b00001111取交,然后左移3位,设为5a;将第5个字节数据与0b11100000取交,然后右移4位,设为5b,将5a和5b取并,记为b5;
(7)将第5个字节数据与0b00111111取交,然后左移2位,设为6a;将第6个字节数据与0b11000000取交,然后右移5位,设为6b,将6a和6b取并,记为b6;
(8)将第6个字节数据与0b01111111取交,然后左移1位,设为7a;将第7个字节数据与0b10000000取交,然后右移6位,设为7b,将7a和7b取并,记为b7;
(9)将第7个字节数据右移1位,记为b8;
(10)将b1、b2、b3、b4、b5、b6、b7、b8使用UTF-8编码输出字符串。
上述二进制转换为UTF-8编码存在两类特殊情况,下面分别对特殊情况的处理进行说明。
(a)不足7字节的情况处理
当最后不足7字节时,在右侧进行补零处理。例如,最后一个字节0b11101010,位于最后一组中的第5位,在右侧2位进行补零,补零后的结果为0b00101000。
(b)无效字符的情况处理
部分字符由于字符含义、显示样式的影响,不适合直接在网络环境中传输,在0-127码位区间中包括三个这样的无效字符,分别为结尾符、换行符和回车符,其对应的UTF-8编码为0b00000000、0b00001010、0b00001101,其余125个字符均为有效的可见字符,能够直接转换为UTF8字符表示。对于无效字符的处理,本发明使用两字节的UTF-8编码方案来解决。两字节UTF-8编码的格式为“110XXXXX 10XXXXXX”,其中“XX”表示可以编码的符号位,共计11个,上述3个无效字符的前四位均为0,后四位才是区分无效字符的“有效位数”,因此,本发明将3个无效字符分别编码为0001、0010和0011,并使用两字节UTF-8编码第一字节的前四个X表示,无效字符下一个字符的7位字节使用两字节UTF-8编码第一字节的第五个X和第二字节的六个X表示。如图2所示。
根据对无效字符的处理方法,本发明的二进制数据转换为UTF-8编码的第(10)步骤修改如下:
(10)判断b1、b2、b3、b4、b5、b6、b7、b8中是否包含无效字符编码,如果不包含,直接使用UTF-8编码输出字符串。
(11)如果包含无效字符编码,记为i,无效字符编码的下一个字节记为i+1;将i的字节与0b01100000取交,然后左移1位,记为a,如果a为0b11000000,将其修改为0b11000010;将i+1与0b10000000取交,然后右移7位,记为b,将a和b取交,记为c;将i+1与0b01111111取交,然后左移1位,记为d。再使用c和d替换i和i+1,使用UTF-8编码输出字符串。
通过上述数据转换方法,可以将原始的二进制数据转换为有效、可见的UTF-8字符,然后在网络环境中传输。
HTTP传输的客户端在收到编码后的网页源码后,需要将文本字符转换为原始的二进制数据(如图片、视频),本发明同时提供了将字符串转换为二进制数据的解码方法,如图3所示,具体步骤如下:
(1)循环读取网页源码中的内容内嵌数据,解析内容内嵌的UTF8字符串DATA;
(2)循环读取DATA字符串内容,每次取8位字节;
(3)将第1个字节数据与0b01111111取交,然后左移1位,记为1a,将第2个字节数据与0b11000000取交,然后右移6位,记为1b,然后将1a和1b取并,记为b1;
(4)将第2个字节数据与0b00111111取交,然后左移2位,记为2a,将第3个字节数据与0b11100000取交,然后右移5位,记为2b,然后将2a和2b取并,记为b2;
(5)将第3个字节数据与0b00011111取交,然后左移3位,记为3a,将第4个字节数据与0b11110000取交,然后右移4位,记为3b,然后将3a和3b取并,记为b3;
(6)将第4个字节数据与0b00001111取交,然后左移4位,记为4a,将第5个字节数据与0b11111000取交,然后右移3位,记为4b,然后将4a和4b取并,记为b4;
(7)将第5个字节数据与0b00000111取交,然后左移5位,记为5a,将第6个字节数据与0b11111100取交,然后右移2位,记为5b,然后将5a和5b取并,记为b5;
(8)将第6个字节数据与0b00000011取交,然后左移6位,记为6a,将第7个字节数据与0b11111110取交,然后右移1位,记为6b,然后将6a和6b取并,记为b6;
(9)将第7个字节数据与0b00000001取交,然后左移7位,记为7a,将第8个字节数据记为7b,然后将7a和7b取并,记为b7;
(10)将b1、b2、b3、b4、b5、b6、b7作为输入8个字符的二进制字节输出到二进制字节数组STREAM中。
(11)在每组内容内嵌字符串数据处理完之后,将二进制字节数组STREAM按照内容内嵌格式XXX解析为相应的二进制文件。
当UTF-8字符编码值大于192(0b11000000)时,表示该字符为两字节UTF-8编码,将其按照如下步骤进行拆分。
(1)将该字符的第一个字节与0b00011110取交,然后右移1位,记为a;
(2)将该字符的第一个字节与0b00000001取交,然后左移6位,记为b1,将该字符的第二个字节与0b00111111取交,然后右移2位,记为b2;
(3)将b1与b2取并,记为b,输出a、b。
Claims (1)
1.一种适用于HTTP内容内嵌的二进制数据编解码方法,其特征在于,包括以下步骤:
步骤1:在网络服务器端,根据网页中的内容链接,遍历读取每个链接INNER对应的二进制文件;
步骤2:从输入二进制文件的数据流中,循环读取7个二进制字节,得到7组二进制数据,每组为8位比特;
步骤3:将得到的7组二进制数据进行重新分组,得到8组二进制字节,每组为7位比特;
步骤4:在得到的8组二进制数据前分别补“0”,补“0”后每组为8位比特,1个字节;
步骤5:对补“0”后的8组二进制数据,分别判断该组二进制数据对应的字节是否为有效的UTF-8字符,如果是,则转到步骤6,否则转到步骤7;
步骤6:将步骤5中的二进制数据作为UTF-8字符输出到字符串DATA中,该字符串为二进制数据转换后的字符串结果;
步骤7:将步骤5中的二进制数据与下一组二进制数据进行重新组合,组合后的前一字节数据的前3位为“110”,后一字节数据的前2位为“10”,剩余11位比特用于存储原始字节信息;
步骤8:将步骤7中的两组二进制数据作为UTF-8字符输出到该文件对应的转换字符串DATA中;
步骤9:将步骤2中的二进制数据流全部处理完之后,将转换字符串DATA以内容内嵌的方式替换原始HTML源码中的内容链接INNER;
步骤10:客户端接收到HTML源码后,遍历所有内容内嵌字符串DATA;
步骤11:循环读取DATA内容,每次读取8个字节;
步骤12:判断每个字节值是否大于192,如果为否,转到步骤13,否则转到步骤14;
步骤13:将每个字节对应的8位二进制数据删除第1位后,保留后7位比特数据,并输出到STREAM中;
步骤14:将该字节数据与下一字节数据组合处理,形成“110XXXXX10XXXXXX”格式的二进制数据,转化为两组二进制数据,共14位比特,并输出到STREAM中;
步骤15:客户端将STREAM解析为内容内嵌字符串DATA相应的二进制数据并在浏览器中渲染使用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910150190.8A CN109871520B (zh) | 2019-02-28 | 2019-02-28 | 一种适用于http内容内嵌的二进制数据编解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910150190.8A CN109871520B (zh) | 2019-02-28 | 2019-02-28 | 一种适用于http内容内嵌的二进制数据编解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109871520A CN109871520A (zh) | 2019-06-11 |
CN109871520B true CN109871520B (zh) | 2023-05-26 |
Family
ID=66919482
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910150190.8A Active CN109871520B (zh) | 2019-02-28 | 2019-02-28 | 一种适用于http内容内嵌的二进制数据编解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109871520B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111428442B (zh) * | 2020-03-25 | 2023-04-21 | 北京思特奇信息技术股份有限公司 | 一种无需字典表的数据转换方法、系统及存储介质 |
CN111600610B (zh) * | 2020-05-26 | 2023-04-28 | 北京思特奇信息技术股份有限公司 | 一种变长整数的通用编码方法、系统及电子设备 |
CN112351107B (zh) * | 2020-11-16 | 2023-10-03 | 百度在线网络技术(北京)有限公司 | 用于编码文件的方法、装置、电子设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016029801A1 (zh) * | 2014-08-28 | 2016-03-03 | 华为技术有限公司 | 编码、解码方法以及编码装置和解码装置 |
CN105740215A (zh) * | 2016-01-23 | 2016-07-06 | 北京掌阔移动传媒科技有限公司 | 一种数据通信编码和解码方法 |
JP6251437B1 (ja) * | 2017-05-26 | 2017-12-20 | 義尚 神山 | 分類用符号生成ソフトウェアを記録した記録媒体 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7584089B2 (en) * | 2002-03-08 | 2009-09-01 | Toshiba Corporation | Method of encoding and decoding for multi-language applications |
CA2426496A1 (en) * | 2003-04-24 | 2004-10-24 | Ibm Canada Limited - Ibm Canada Limitee | Processing fixed-format data in a unicode environment |
US8368567B2 (en) * | 2010-07-29 | 2013-02-05 | Sap Ag | Codepage-independent binary encoding method |
US10430182B2 (en) * | 2015-01-12 | 2019-10-01 | Microsoft Technology Licensing, Llc | Enhanced compression, encoding, and naming for resource strings |
-
2019
- 2019-02-28 CN CN201910150190.8A patent/CN109871520B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016029801A1 (zh) * | 2014-08-28 | 2016-03-03 | 华为技术有限公司 | 编码、解码方法以及编码装置和解码装置 |
CN105740215A (zh) * | 2016-01-23 | 2016-07-06 | 北京掌阔移动传媒科技有限公司 | 一种数据通信编码和解码方法 |
JP6251437B1 (ja) * | 2017-05-26 | 2017-12-20 | 義尚 神山 | 分類用符号生成ソフトウェアを記録した記録媒体 |
Also Published As
Publication number | Publication date |
---|---|
CN109871520A (zh) | 2019-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109871520B (zh) | 一种适用于http内容内嵌的二进制数据编解码方法 | |
US9081790B2 (en) | Methods and apparatus for increasing the efficiency of electronic data storage and transmission | |
CN105450232A (zh) | 编码、解码方法以及编码装置和解码装置 | |
CN107947918B (zh) | 一种基于字符特征的无载体文本隐写方法 | |
US20040215647A1 (en) | Processing fixed-format data in a unicode environment | |
US20070168560A1 (en) | System and method for compressing URL request parameters | |
TW200304311A (en) | Methods for encoding, decoding, compressing, and communicating data in a communications network | |
WO2006043142A1 (en) | Adaptive compression scheme | |
CN1251135C (zh) | 自描述数据标签 | |
US7809697B1 (en) | Compressing hyperlinks in a hyperlink-based document | |
CN101610268A (zh) | 一种关键字过滤的实现方法和设备 | |
CN101325418B (zh) | 一种基于概率查表的哈夫曼快速解码方法 | |
CN104320146A (zh) | 在序列间置换涡轮码系统中利用可变长度输入 | |
CN108573069B (zh) | 一种加速压缩流量正则表达式匹配的Twins方法 | |
US9235610B2 (en) | Short string compression | |
CN102651795B (zh) | 游长缩减的二元序列压缩编码方法 | |
CN100581258C (zh) | 霍夫曼解码方法和霍夫曼解码装置 | |
US7930435B2 (en) | Hub and spoke compression | |
CN113986820A (zh) | 一种lz4格式文件转换为gzip格式文件的方法 | |
US20050138545A1 (en) | Efficient universal plug-and-play markup language document optimization and compression | |
EP1360772A2 (en) | A method of data compression | |
CN105183750B (zh) | 紧凑式xml解析系统 | |
CN103929447A (zh) | 一种解析HTTP chunked编码数据的方法 | |
KR20080094043A (ko) | 데이터 인코딩 및 디코딩 방법, 데이터 전송 방법, 송신기 및 수신기 | |
Haverty | MSDTP-Message Services Data Transmission Protocol |
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 |