查看源代码 Base (Elixir v1.16.2)
此模块提供根据 RFC 4648 的数据编码和解码函数。
本文档定义了常用的 Base 16、Base 32 和 Base 64 编码方案。
Base 16 字母表
值 | 编码 | 值 | 编码 | 值 | 编码 | 值 | 编码 |
---|---|---|---|---|---|---|---|
0 | 0 | 4 | 4 | 8 | 8 | 12 | C |
1 | 1 | 5 | 5 | 9 | 9 | 13 | D |
2 | 2 | 6 | 6 | 10 | A | 14 | E |
3 | 3 | 7 | 7 | 11 | B | 15 | F |
Base 32 字母表
值 | 编码 | 值 | 编码 | 值 | 编码 | 值 | 编码 |
---|---|---|---|---|---|---|---|
0 | A | 9 | J | 18 | S | 27 | 3 |
1 | B | 10 | K | 19 | T | 28 | 4 |
2 | C | 11 | L | 20 | U | 29 | 5 |
3 | D | 12 | M | 21 | V | 30 | 6 |
4 | E | 13 | N | 22 | W | 31 | 7 |
5 | F | 14 | O | 23 | X | ||
6 | G | 15 | P | 24 | Y | (填充) | = |
7 | H | 16 | Q | 25 | Z | ||
8 | I | 17 | R | 26 | 2 |
Base 32 (扩展十六进制) 字母表
值 | 编码 | 值 | 编码 | 值 | 编码 | 值 | 编码 |
---|---|---|---|---|---|---|---|
0 | 0 | 9 | 9 | 18 | I | 27 | R |
1 | 1 | 10 | A | 19 | J | 28 | S |
2 | 2 | 11 | B | 20 | K | 29 | T |
3 | 3 | 12 | C | 21 | L | 30 | U |
4 | 4 | 13 | D | 22 | M | 31 | V |
5 | 5 | 14 | E | 23 | N | ||
6 | 6 | 15 | F | 24 | O | (填充) | = |
7 | 7 | 16 | G | 25 | P | ||
8 | 8 | 17 | H | 26 | Q |
Base 64 字母表
值 | 编码 | 值 | 编码 | 值 | 编码 | 值 | 编码 |
---|---|---|---|---|---|---|---|
0 | A | 17 | R | 34 | i | 51 | z |
1 | B | 18 | S | 35 | j | 52 | 0 |
2 | C | 19 | T | 36 | k | 53 | 1 |
3 | D | 20 | U | 37 | l | 54 | 2 |
4 | E | 21 | V | 38 | m | 55 | 3 |
5 | F | 22 | W | 39 | n | 56 | 4 |
6 | G | 23 | X | 40 | o | 57 | 5 |
7 | H | 24 | Y | 41 | p | 58 | 6 |
8 | I | 25 | Z | 42 | q | 59 | 7 |
9 | J | 26 | a | 43 | r | 60 | 8 |
10 | K | 27 | b | 44 | s | 61 | 9 |
11 | L | 28 | c | 45 | t | 62 | + |
12 | M | 29 | d | 46 | u | 63 | / |
13 | N | 30 | e | 47 | v | ||
14 | O | 31 | f | 48 | w | (填充) | = |
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
Base 64 (URL 和文件名安全) 字母表
值 | 编码 | 值 | 编码 | 值 | 编码 | 值 | 编码 |
---|---|---|---|---|---|---|---|
0 | A | 17 | R | 34 | i | 51 | z |
1 | B | 18 | S | 35 | j | 52 | 0 |
2 | C | 19 | T | 36 | k | 53 | 1 |
3 | D | 20 | U | 37 | l | 54 | 2 |
4 | E | 21 | V | 38 | m | 55 | 3 |
5 | F | 22 | W | 39 | n | 56 | 4 |
6 | G | 23 | X | 40 | o | 57 | 5 |
7 | H | 24 | Y | 41 | p | 58 | 6 |
8 | I | 25 | Z | 42 | q | 59 | 7 |
9 | J | 26 | a | 43 | r | 60 | 8 |
10 | K | 27 | b | 44 | s | 61 | 9 |
11 | L | 28 | c | 45 | t | 62 | - |
12 | M | 29 | d | 46 | u | 63 | _ |
13 | N | 30 | e | 47 | v | ||
14 | O | 31 | f | 48 | w | (填充) | = |
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
摘要
函数
将 Base 16 编码的字符串解码为二进制字符串。
将 Base 16 编码的字符串解码为二进制字符串。
将 Base 32 编码的字符串解码为二进制字符串。
将 Base 32 编码的字符串解码为二进制字符串。
将 Base 64 编码的字符串解码为二进制字符串。
将 Base 64 编码的字符串解码为二进制字符串。
将二进制字符串编码为 Base 16 编码的字符串。
将二进制字符串编码为 Base 32 编码的字符串。
将二进制字符串编码为 Base 64 编码的字符串。
将使用扩展十六进制字母表的 Base 32 编码的字符串解码为二进制字符串。
将使用扩展十六进制字母表的 Base 32 编码的字符串解码为二进制字符串。
将二进制字符串编码为使用扩展十六进制字母表的 Base 32 编码的字符串。
将使用 URL 和文件名安全字母表的 Base 64 编码的字符串解码为二进制字符串。
将使用 URL 和文件名安全字母表的 Base 64 编码的字符串解码为二进制字符串。
将二进制字符串编码为使用 URL 和文件名安全字母表的 Base 64 编码的字符串。
类型
函数
@spec decode16(binary(), [{:case, decode_case()}]) :: {:ok, binary()} | :error
将 Base 16 编码的字符串解码为二进制字符串。
选项
接受的选项是
:case
- 指定解码时接受的字符大小写
:case
的值可以是
:upper
- 仅允许大写字符(默认):lower
- 仅允许小写字符:mixed
- 允许混合大小写字符
示例
iex> Base.decode16("666F6F626172")
{:ok, "foobar"}
iex> Base.decode16("666f6f626172", case: :lower)
{:ok, "foobar"}
iex> Base.decode16("666f6F626172", case: :mixed)
{:ok, "foobar"}
@spec decode16!(binary(), [{:case, decode_case()}]) :: binary()
将 Base 16 编码的字符串解码为二进制字符串。
选项
接受的选项是
:case
- 指定解码时接受的字符大小写
:case
的值可以是
:upper
- 仅允许大写字符(默认):lower
- 仅允许小写字符:mixed
- 允许混合大小写字符
如果填充不正确或字符串中存在非字母字符,则会引发 ArgumentError
异常。
示例
iex> Base.decode16!("666F6F626172")
"foobar"
iex> Base.decode16!("666f6f626172", case: :lower)
"foobar"
iex> Base.decode16!("666f6F626172", case: :mixed)
"foobar"
@spec decode32(binary(), case: decode_case(), padding: boolean()) :: {:ok, binary()} | :error
将 Base 32 编码的字符串解码为二进制字符串。
选项
接受的选项是
:case
- 指定解码时接受的字符大小写:padding
- 指定是否需要填充
:case
的值可以是
:upper
- 仅允许大写字符(默认):lower
- 仅允许小写字符:mixed
- 允许混合大小写字符
:padding
的值可以是
true
- 要求输入字符串填充到最接近的 8 的倍数(默认)false
- 忽略输入字符串中的填充
示例
iex> Base.decode32("MZXW6YTBOI======")
{:ok, "foobar"}
iex> Base.decode32("mzxw6ytboi======", case: :lower)
{:ok, "foobar"}
iex> Base.decode32("mzXW6ytBOi======", case: :mixed)
{:ok, "foobar"}
iex> Base.decode32("MZXW6YTBOI", padding: false)
{:ok, "foobar"}
@spec decode32!(binary(), case: decode_case(), padding: boolean()) :: binary()
将 Base 32 编码的字符串解码为二进制字符串。
如果填充不正确或字符串中存在非字母字符,则会引发 ArgumentError
异常。
选项
接受的选项是
:case
- 指定解码时接受的字符大小写:padding
- 指定是否需要填充
:case
的值可以是
:upper
- 仅允许大写字符(默认):lower
- 仅允许小写字符:mixed
- 允许混合大小写字符
:padding
的值可以是
true
- 要求输入字符串填充到最接近的 8 的倍数(默认)false
- 忽略输入字符串中的填充
示例
iex> Base.decode32!("MZXW6YTBOI======")
"foobar"
iex> Base.decode32!("mzxw6ytboi======", case: :lower)
"foobar"
iex> Base.decode32!("mzXW6ytBOi======", case: :mixed)
"foobar"
iex> Base.decode32!("MZXW6YTBOI", padding: false)
"foobar"
将 Base 64 编码的字符串解码为二进制字符串。
接受 ignore: :whitespace
选项,该选项将忽略输入字符串中的所有空格字符。
接受 padding: false
选项,该选项将忽略输入字符串中的填充。
示例
iex> Base.decode64("Zm9vYmFy")
{:ok, "foobar"}
iex> Base.decode64("Zm9vYmFy\n", ignore: :whitespace)
{:ok, "foobar"}
iex> Base.decode64("Zm9vYg==")
{:ok, "foob"}
iex> Base.decode64("Zm9vYg", padding: false)
{:ok, "foob"}
将 Base 64 编码的字符串解码为二进制字符串。
接受 ignore: :whitespace
选项,该选项将忽略输入字符串中的所有空格字符。
接受 padding: false
选项,该选项将忽略输入字符串中的填充。
如果填充不正确或字符串中存在非字母字符,则会引发 ArgumentError
异常。
示例
iex> Base.decode64!("Zm9vYmFy")
"foobar"
iex> Base.decode64!("Zm9vYmFy\n", ignore: :whitespace)
"foobar"
iex> Base.decode64!("Zm9vYg==")
"foob"
iex> Base.decode64!("Zm9vYg", padding: false)
"foob"
@spec encode16(binary(), [{:case, encode_case()}]) :: binary()
将二进制字符串编码为 Base 16 编码的字符串。
选项
接受的选项是
:case
- 指定编码时使用的字符大小写
:case
的值可以是
:upper
- 使用大写字符(默认):lower
- 使用小写字符
示例
iex> Base.encode16("foobar")
"666F6F626172"
iex> Base.encode16("foobar", case: :lower)
"666f6f626172"
@spec encode32(binary(), case: encode_case(), padding: boolean()) :: binary()
将二进制字符串编码为 Base 32 编码的字符串。
选项
接受的选项是
:case
- 指定编码时使用的字符大小写:padding
- 指定是否应用填充
:case
的值可以是
:upper
- 使用大写字符(默认):lower
- 使用小写字符
:padding
的值可以是
true
- 将输出字符串填充到最接近的 8 的倍数(默认)false
- 从输出字符串中省略填充
示例
iex> Base.encode32("foobar")
"MZXW6YTBOI======"
iex> Base.encode32("foobar", case: :lower)
"mzxw6ytboi======"
iex> Base.encode32("foobar", padding: false)
"MZXW6YTBOI"
将二进制字符串编码为 Base 64 编码的字符串。
接受 padding: false
选项,该选项将从输出字符串中省略填充。
示例
iex> Base.encode64("foobar")
"Zm9vYmFy"
iex> Base.encode64("foob")
"Zm9vYg=="
iex> Base.encode64("foob", padding: false)
"Zm9vYg"
@spec hex_decode32(binary(), case: decode_case(), padding: boolean()) :: {:ok, binary()} | :error
将使用扩展十六进制字母表的 Base 32 编码的字符串解码为二进制字符串。
选项
接受的选项是
:case
- 指定解码时接受的字符大小写:padding
- 指定是否需要填充
:case
的值可以是
:upper
- 仅允许大写字符(默认):lower
- 仅允许小写字符:mixed
- 允许混合大小写字符
:padding
的值可以是
true
- 要求输入字符串填充到最接近的 8 的倍数(默认)false
- 忽略输入字符串中的填充
示例
iex> Base.hex_decode32("CPNMUOJ1E8======")
{:ok, "foobar"}
iex> Base.hex_decode32("cpnmuoj1e8======", case: :lower)
{:ok, "foobar"}
iex> Base.hex_decode32("cpnMuOJ1E8======", case: :mixed)
{:ok, "foobar"}
iex> Base.hex_decode32("CPNMUOJ1E8", padding: false)
{:ok, "foobar"}
@spec hex_decode32!(binary(), case: decode_case(), padding: boolean()) :: binary()
将使用扩展十六进制字母表的 Base 32 编码的字符串解码为二进制字符串。
如果填充不正确或字符串中存在非字母字符,则会引发 ArgumentError
异常。
选项
接受的选项是
:case
- 指定解码时接受的字符大小写:padding
- 指定是否需要填充
:case
的值可以是
:upper
- 仅允许大写字符(默认):lower
- 仅允许小写字符:mixed
- 允许混合大小写字符
:padding
的值可以是
true
- 要求输入字符串填充到最接近的 8 的倍数(默认)false
- 忽略输入字符串中的填充
示例
iex> Base.hex_decode32!("CPNMUOJ1E8======")
"foobar"
iex> Base.hex_decode32!("cpnmuoj1e8======", case: :lower)
"foobar"
iex> Base.hex_decode32!("cpnMuOJ1E8======", case: :mixed)
"foobar"
iex> Base.hex_decode32!("CPNMUOJ1E8", padding: false)
"foobar"
@spec hex_encode32(binary(), case: encode_case(), padding: boolean()) :: binary()
将二进制字符串编码为使用扩展十六进制字母表的 Base 32 编码的字符串。
选项
接受的选项是
:case
- 指定编码时使用的字符大小写:padding
- 指定是否应用填充
:case
的值可以是
:upper
- 使用大写字符(默认):lower
- 使用小写字符
:padding
的值可以是
true
- 将输出字符串填充到最接近的 8 的倍数(默认)false
- 从输出字符串中省略填充
示例
iex> Base.hex_encode32("foobar")
"CPNMUOJ1E8======"
iex> Base.hex_encode32("foobar", case: :lower)
"cpnmuoj1e8======"
iex> Base.hex_encode32("foobar", padding: false)
"CPNMUOJ1E8"
将使用 URL 和文件名安全字母表的 Base 64 编码的字符串解码为二进制字符串。
接受 ignore: :whitespace
选项,该选项将忽略输入字符串中的所有空格字符。
接受 padding: false
选项,该选项将忽略输入字符串中的填充。
示例
iex> Base.url_decode64("_3_-_A==")
{:ok, <<255, 127, 254, 252>>}
iex> Base.url_decode64("_3_-_A==\n", ignore: :whitespace)
{:ok, <<255, 127, 254, 252>>}
iex> Base.url_decode64("_3_-_A", padding: false)
{:ok, <<255, 127, 254, 252>>}
将使用 URL 和文件名安全字母表的 Base 64 编码的字符串解码为二进制字符串。
接受 ignore: :whitespace
选项,该选项将忽略输入字符串中的所有空格字符。
接受 padding: false
选项,该选项将忽略输入字符串中的填充。
如果填充不正确或字符串中存在非字母字符,则会引发 ArgumentError
异常。
示例
iex> Base.url_decode64!("_3_-_A==")
<<255, 127, 254, 252>>
iex> Base.url_decode64!("_3_-_A==\n", ignore: :whitespace)
<<255, 127, 254, 252>>
iex> Base.url_decode64!("_3_-_A", padding: false)
<<255, 127, 254, 252>>
将二进制字符串编码为使用 URL 和文件名安全字母表的 Base 64 编码的字符串。
接受 padding: false
选项,该选项将从输出字符串中省略填充。
示例
iex> Base.url_encode64(<<255, 127, 254, 252>>)
"_3_-_A=="
iex> Base.url_encode64(<<255, 127, 254, 252>>, padding: false)
"_3_-_A"