码迷,mamicode.com
首页 > 其他好文 > 详细

常用编码格式

时间:2020-05-24 13:57:25      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:cap   base   header   file   交换   字符   encoding   ons   form   

常用编码格式


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位分为一组, 记为\(\nu_j, j=[0,3]\);
    • 将每组中的每个\(\nu_j\)视为十进制索引, 然后依次将每个\(\nu_j\)替换为\(\mathbb{E}[\nu_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位分为一组, 记为\(\nu_j, j=[0,5]\);
    • 将每组中的每个\(\nu_j\)视为十进制索引, 然后依次将每个\(\nu_j\)替换为\(\mathbb{E}[\nu_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位一组, 记为\(\nu_j, j=[0,1]\);
    • 将每组中的每个\(\nu_j\)视为十进制索引, 然后依次将每个\(\nu_j\)替换为\(\mathbb{E}[\nu_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;

常用编码格式

标签:cap   base   header   file   交换   字符   encoding   ons   form   

原文地址:https://www.cnblogs.com/mengsuenyan/p/12950518.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!