[77]以太坊数据字段(input)解析

1 背景

以太坊系统中默认存储数据的字段的是“input”。
“input”字段的内容是由用户(创建以太坊交易的人)自行写入,没有固定格式。
调研显示,“input”字段常见格式类型包括:“ascii”,“utf8”,以及一些变种(utf8,每两个字符之间用\x隔断)。
本文总结针对以太坊数据字段(input)的解析方法。

2 提纲:

(1)了解互联网行业常用的编码格式(完成)
(2)统计以太坊数据存储参数常用的格式类型
(3)设计解析方案
(4)编写解析程序

3 内容

3.1 了解互联网行业常用的编码格式

2机制(hex)
16机制(hex)
ascii
utf8
unicode

1 Byte(B) = 8 bit

ASCII编码 1B

GB2312编码

Unicode编码 2B-4B

UTF-8编码 1B-6B

unicode和ascii是一种编码方式,而UTF-8,UTF-16等是一种存储方式,在存储和传输上节约空间、提高性能的一种编码形式。
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

从存储层面看,字符常用的格式是UTF8

存储层面

3.1.1 存储容量单位

(1)位(Bit)
-计算机数据存储基础单位,包含1位的二进制数

(2)字节(Byte)
-最常用的字节是八位的字节,即它包含八位的二进制数
-也可以写为二位的十六机制数

3.1.2 数据表示方法

(1)二进制(binary)
-逢2进1,[0-1]

(1)16进制(Hexadecimal)
-逢16进1,[0-9-A-F]
-编程语言,使用字首“0x”,例如“0x5A3”。
-转义序列,使用字首“\x”,例如“\x1abf4”。

3.1.2 数据符合集合

(1)ASCII
-英文字符
-1B,128个。高位置0,后7位用于编码,常见的符号和英文字符。

(2)GB2312
-英文字符+中文字符
-2B,“区字节”+“位字节”

(3)GBK
-英文字符+中文字符
-1B-2B。英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。
-GBK 向下与 GB 2312 编码兼容,向上支持 ISO 10646.1国际标准。

(4)Unicode(统一码、万国码、单一码)
-英文字符+中文字符+日文+韩文+其他
-2B-4B。原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
-转义序列,使用字首“u”,例如“uCA”。

3.1.2 数据编码方法

(1)UTF-8
-1B-4B
-UTF-8是一种编码方式,根据字符在Unicode字符集中的序号,将字符集分成4种,分别采用1B-4B存储。
-编码方法(Unicode -> UTF-8)

序号范围 编码方法 十六进制特征 (字符,unicode,utf8)
000000-00007F 0XXX XXXX [0-7]* (a,\u61 ,0x61)
000080-0007FF 110xxxxx 10xxxxxx [C-D]* [8-B]* (ê,\uCA ,0xC38A)
000800-00FFFF 1110xxxx 10xxxxxx 10xxxxxx E* [8-B]* [8-B]* (叶,\u53f6 ,\xE58FB6)
010000-10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx F* [8-B]* [8-B]* [8-B]*

编码例子:
\uCA ->\xC3 8A, 过程如下:
\uCA(1100 1010)处于0080 ~07FF之间,从上文中的转换表可知对其编码需要2bytes,即两个字节,其对 应 UTF-8格式为: 110X XXXX10XX XXXX。从此格式中可以看到,对其编码还需要11位,而uCA(1100 1010)仅有8位,这时需要在其二进制数前补0凑成11位: 000 1100 1010, 依次填入110X XXXX 10XX XXXX的空位中, 即得 1100 0011 1000 1010(C38A)。

文献

[16进制]
https://baike.baidu.com/item/%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6/4162457?fromtitle=16%E8%BF%9B%E5%88%B6&fromid=8541382&fr=aladdin
[ASCII]https://baike.baidu.com/item/ASCII
[ASCII、Unicode和UTF-8等常见字符编码格式介绍]https://www.cnblogs.com/Ladylittleleaf/p/9633993.html
[UTF-8]https://baike.baidu.com/item/UTF-8
[Unicode]https://baike.baidu.com/item/Unicode
[汉字编码]https://bianma.supfree.net/chaye.asp?id=53F6