查看源代码 Base (Elixir v1.16.2)

此模块提供根据 RFC 4648 的数据编码和解码函数。

本文档定义了常用的 Base 16、Base 32 和 Base 64 编码方案。

Base 16 字母表

编码编码编码编码
00448812C
11559913D
226610A14E
337711B15F

Base 32 字母表

编码编码编码编码
0A9J18S273
1B10K19T284
2C11L20U295
3D12M21V306
4E13N22W317
5F14O23X
6G15P24Y(填充)=
7H16Q25Z
8I17R262

Base 32 (扩展十六进制) 字母表

编码编码编码编码
009918I27R
1110A19J28S
2211B20K29T
3312C21L30U
4413D22M31V
5514E23N
6615F24O(填充)=
7716G25P
8817H26Q

Base 64 字母表

编码编码编码编码
0A17R34i51z
1B18S35j520
2C19T36k531
3D20U37l542
4E21V38m553
5F22W39n564
6G23X40o575
7H24Y41p586
8I25Z42q597
9J26a43r608
10K27b44s619
11L28c45t62+
12M29d46u63/
13N30e47v
14O31f48w(填充)=
15P32g49x
16Q33h50y

Base 64 (URL 和文件名安全) 字母表

编码编码编码编码
0A17R34i51z
1B18S35j520
2C19T36k531
3D20U37l542
4E21V38m553
5F22W39n564
6G23X40o575
7H24Y41p586
8I25Z42q597
9J26a43r608
10K27b44s619
11L28c45t62-
12M29d46u63_
13N30e47v
14O31f48w(填充)=
15P32g49x
16Q33h50y

摘要

函数

将 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 编码的字符串。

类型

@type decode_case() :: :upper | :lower | :mixed
@type encode_case() :: :upper | :lower

函数

链接到此函数

decode16(string, opts \\ [])

查看源代码
@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"}
链接到此函数

decode16!(string, opts \\ [])

查看源代码
@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"
链接到此函数

decode32(string, opts \\ [])

查看源代码
@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"}
链接到此函数

decode32!(string, opts \\ [])

查看源代码
@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"
链接到此函数

decode64(string, opts \\ [])

查看源代码
@spec decode64(binary(), ignore: :whitespace, padding: boolean()) ::
  {:ok, binary()} | :error

将 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"}
链接到此函数

decode64!(string, opts \\ [])

查看源代码
@spec decode64!(binary(), ignore: :whitespace, padding: boolean()) :: binary()

将 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"
链接到此函数

encode16(data, opts \\ [])

查看源代码
@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"
链接到此函数

encode32(data, opts \\ [])

查看源代码
@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"
链接到此函数

encode64(data, opts \\ [])

查看源代码
@spec encode64(binary(), [{:padding, boolean()}]) :: binary()

将二进制字符串编码为 Base 64 编码的字符串。

接受 padding: false 选项,该选项将从输出字符串中省略填充。

示例

iex> Base.encode64("foobar")
"Zm9vYmFy"

iex> Base.encode64("foob")
"Zm9vYg=="

iex> Base.encode64("foob", padding: false)
"Zm9vYg"
链接到此函数

hex_decode32(string, opts \\ [])

查看源代码
@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"}
链接到此函数

hex_decode32!(string, opts \\ [])

查看源代码
@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"
链接到此函数

hex_encode32(data, opts \\ [])

查看源代码
@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_decode64(string, opts \\ [])

查看源代码
@spec url_decode64(binary(), ignore: :whitespace, padding: boolean()) ::
  {:ok, binary()} | :error

将使用 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_decode64!(string, opts \\ [])

查看源代码
@spec url_decode64!(binary(), ignore: :whitespace, padding: boolean()) :: binary()

将使用 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_encode64(data, opts \\ [])

查看源代码
@spec url_encode64(binary(), [{:padding, boolean()}]) :: binary()

将二进制字符串编码为使用 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"