常用编码格式

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的整数倍);

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的整数倍);

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

XML

PEM

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;

以上是关于常用编码格式的主要内容,如果未能解决你的问题,请参考以下文章

C#解码base64编码的二进制数据的代码

常用编码格式

常用编码格式

C#常用代码片段备忘

常用python日期日志获取内容循环的代码片段

swift常用代码片段