常用编码格式
Posted mengsuenyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用编码格式相关的知识,希望对你有一定的参考价值。
常用编码格式
Base64
- Base64编码表, 记为(mathbb{E}):
const BASE64_STD: [u8; 64] = [
b‘A‘, b‘B‘, b‘C‘, b‘D‘, b‘E‘, b‘F‘, b‘G‘, b‘H‘, b‘I‘, b‘J‘, b‘K‘, b‘L‘, b‘M‘, b‘N‘, b‘O‘, b‘P‘, b‘Q‘, b‘R‘, b‘S‘, b‘T‘, b‘U‘, b‘V‘, b‘W‘, b‘X‘, b‘Y‘, b‘Z‘, b‘a‘, b‘b‘, b‘c‘, b‘d‘, b‘e‘, b‘f‘, b‘g‘, b‘h‘, b‘i‘, b‘j‘, b‘k‘, b‘l‘, b‘m‘, b‘n‘, b‘o‘, b‘p‘, b‘q‘, b‘r‘, b‘s‘, b‘t‘, b‘u‘, b‘v‘, b‘w‘, b‘x‘, b‘y‘, b‘z‘, b‘0‘, b‘1‘, b‘2‘, b‘3‘, b‘4‘, b‘5‘, b‘6‘, b‘7‘, b‘8‘, b‘9‘, b‘+‘, b‘/‘,
];
const BASE64_URL: [u8; 64] = [
b‘A‘, b‘B‘, b‘C‘, b‘D‘, b‘E‘, b‘F‘, b‘G‘, b‘H‘, b‘I‘, b‘J‘, b‘K‘, b‘L‘, b‘M‘, b‘N‘, b‘O‘, b‘P‘, b‘Q‘, b‘R‘, b‘S‘, b‘T‘, b‘U‘, b‘V‘, b‘W‘, b‘X‘, b‘Y‘, b‘Z‘, b‘a‘, b‘b‘, b‘c‘, b‘d‘, b‘e‘, b‘f‘, b‘g‘, b‘h‘, b‘i‘, b‘j‘, b‘k‘, b‘l‘, b‘m‘, b‘n‘, b‘o‘, b‘p‘, b‘q‘, b‘r‘, b‘s‘, b‘t‘, b‘u‘, b‘v‘, b‘w‘, b‘x‘, b‘y‘, b‘z‘, b‘0‘, b‘1‘, b‘2‘, b‘3‘, b‘4‘, b‘5‘, b‘6‘, b‘7‘, b‘8‘, b‘9‘, b‘-‘, b‘_‘,
];
- 编码方式:
- 记有一串二进制数据作为输入数据(字节长度记为(l)), 按输入顺序每3个字节分为一组(不足3个字节的组末尾填充
0x00
补齐到三字节), 每组数据记为(upsilon_i, i=[0, (l+2)/3]); - 将每组数据(upsilon_i)按输入顺序每6位分为一组, 记为( u_j, j=[0,3]);
- 将每组中的每个( u_j)视为十进制索引, 然后依次将每个( u_j)替换为(mathbb{E}[ u_j]), 得到二进制输入数据的Base64编码输出;
- 如果因为输入数据长度不是3字节的整数倍而需要补(m)个
0x00
对齐时, 可自主选择在编码输出末尾补(m)个b‘=‘
(不补也行, Base64编码输出字节长度必是4的整数倍);
- 记有一串二进制数据作为输入数据(字节长度记为(l)), 按输入顺序每3个字节分为一组(不足3个字节的组末尾填充
Base32
- Base32编码表, 记为(mathbb{E}):
const BASE32_STD: [u8; 32] = [
b‘A‘, b‘B‘, b‘C‘, b‘D‘, b‘E‘, b‘F‘, b‘G‘, b‘H‘, b‘I‘, b‘J‘, b‘K‘, b‘L‘, b‘M‘, b‘N‘, b‘O‘, b‘P‘, b‘Q‘, b‘R‘, b‘S‘, b‘T‘, b‘U‘, b‘V‘, b‘W‘, b‘X‘, b‘Y‘, b‘Z‘, b‘2‘, b‘3‘, b‘4‘, b‘5‘, b‘6‘, b‘7‘,
];
const BASE32_URL: [u8; 32] = [
b‘0‘, b‘1‘, b‘2‘, b‘3‘, b‘4‘, b‘5‘, b‘6‘, b‘7‘, b‘8‘, b‘9‘, b‘A‘, b‘B‘, b‘C‘, b‘D‘, b‘E‘, b‘F‘, b‘G‘, b‘H‘, b‘I‘, b‘J‘, b‘K‘, b‘L‘, b‘M‘, b‘N‘, b‘O‘, b‘P‘, b‘Q‘, b‘R‘, b‘S‘, b‘T‘, b‘U‘, b‘V‘,
];
- 编码方式:
- 记有一串二进制数据作为输入数据(字节长度记为(l)), 按输入顺序每5个字节分为一组(不足5个字节的组末尾填充
0x00
补齐到三字节), 每组数据记为(upsilon_i, i=[0, (l+4)/5]); - 将每组数据(upsilon_i)按输入顺序每5位分为一组, 记为( u_j, j=[0,5]);
- 将每组中的每个( u_j)视为十进制索引, 然后依次将每个( u_j)替换为(mathbb{E}[ u_j]), 得到二进制输入数据的Base32编码输出;
- 如果因为输入数据长度不是5字节的整数倍而需要补(m)个
0x00
对齐时, 可自主选择在编码输出末尾补(m)个b‘=‘
(不补也行, Base64编码输出字节长度必是8的整数倍);
- 记有一串二进制数据作为输入数据(字节长度记为(l)), 按输入顺序每5个字节分为一组(不足5个字节的组末尾填充
Base16
- Base16编码表, 记为(mathbb{E}):
const BASE16_STD: [u8; 16] = [
b‘0‘, b‘1‘, b‘2‘, b‘3‘, b‘4‘, b‘5‘, b‘6‘, b‘7‘, b‘8‘, b‘9‘, b‘A‘, b‘B‘, b‘C‘, b‘D‘, b‘E‘, b‘F‘,
];
- 编码方式:
- 记有一串二进制数据作为输入数据(字节长度记为(l)), 按输入顺序将每个字节分为一组, 记为(upsilon_i);
- 将每组数据(upsilon_i)按输入顺序每4位一组, 记为( u_j, j=[0,1]);
- 将每组中的每个( u_j)视为十进制索引, 然后依次将每个( u_j)替换为(mathbb{E}[ u_j]), 得到二进制输入数据的Base16编码输出;
CSV
逗号分隔值文件格式, 语法形式如下:
file = [header CRLF] record *(CRLF record) [CRLF]
header = name * (COMMA name)
record = field * (COMMA field)
name = field
field = (escaped / non-escaped)
escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
non-escaped = *TEXTDATA
COMMA = 0x2C
CR = 0x0D
DQUOTE = 0x22
LF = 0x0A
CRLF = CR LF
TEXTDATA = 0x20-0x21 / 0x23-0x2B / 0x2D-0x7E
JSON
语言独立的基于文本的轻量级数据交换格式, 语法形式如下:
data = value, *
value = object | array | number | string | true | false | null
object = {string: value}
array = [value, *];
number = 实数集;
string = utf-8编码字符串;
XML
PEM
参考资料
- RFC 4648 (The Base 16, Base 32 and Base64 Data Encodings);
- RFC 4180 (Common Format and MIME Type for Comma-Seperated Values(CSV) Files);
- ECMA-404: The JSON Data Interchange Format(2ed Edition December 2017);
- XML;
- RFC 1421: Privacy Enhancement for Internet Electronic Mail;
以上是关于常用编码格式的主要内容,如果未能解决你的问题,请参考以下文章