Spec-Zone.ru › Go

Пакет base64

  • import "encoding/base64"
  • Обзор
  • Указатель
  • Примеры

Обзор

Пакет base64 реализует кодирование base64 согласно RFC 4648.

Пример

Код:

msg := "Hello, 世界"
encoded := base64.StdEncoding.EncodeToString([]byte(msg))
fmt.Println(encoded)
decoded, err := base64.StdEncoding.DecodeString(encoded)
if err != nil {
    fmt.Println("decode error:", err)
    return
}
fmt.Println(string(decoded))

Вывод:

SGVsbG8sIOS4lueVjA==
Hello, 世界

Указатель

  • Константы
  • Переменные
  • func NewDecoder(enc *Encoding, r io.Reader) io.Reader
  • func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser
  • type CorruptInputError
  • func (e CorruptInputError) Error() string
  • type Encoding
  • func NewEncoding(encoder string) *Encoding
  • func (enc *Encoding) AppendDecode(dst, src []byte) ([]byte, error)
  • func (enc *Encoding) AppendEncode(dst, src []byte) []byte
  • func (enc *Encoding) Decode(dst, src []byte) (n int, err error)
  • func (enc *Encoding) DecodeString(s string) ([]byte, error)
  • func (enc *Encoding) DecodedLen(n int) int
  • func (enc *Encoding) Encode(dst, src []byte)
  • func (enc *Encoding) EncodeToString(src []byte) string
  • func (enc *Encoding) EncodedLen(n int) int
  • func (enc Encoding) Strict() *Encoding
  • func (enc Encoding) WithPadding(padding rune) *Encoding

Примеры

Пакет
Encoding.Decode
Encoding.DecodeString
Encoding.Encode
Encoding.EncodeToString
NewEncoder

Файлы пакета

base64.go

Константы

const (
    StdPadding rune = '=' // Standard padding character
    NoPadding  rune = -1  // No padding
)

Переменные

RawStdEncoding — это стандартное необрамлённое заполнителем кодирование base64, определённое в разделе 3.2 RFC 4648. Оно совпадает с StdEncoding, но не содержит символов заполнения.

var RawStdEncoding = StdEncoding.WithPadding(NoPadding)

RawURLEncoding — это альтернативное кодирование base64 без заполнителей, определённое в RFC 4648. Обычно оно используется в URL-адресах и именах файлов. Оно совпадает с URLEncoding, но не содержит символов заполнения.

var RawURLEncoding = URLEncoding.WithPadding(NoPadding)

StdEncoding — это стандартное кодирование base64, определённое в RFC 4648.

var StdEncoding = NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")

URLEncoding — это альтернативное кодирование base64, определённое в RFC 4648. Обычно оно используется в URL-адресах и именах файлов.

var URLEncoding = NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_")

func NewDecoder

func NewDecoder(enc *Encoding, r io.Reader) io.Reader

NewDecoder создаёт новый потоковый декодер base64.

func NewEncoder

func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser

NewEncoder возвращает новый потоковый кодировщик base64. Данные, записанные в возвращённый writer, будут закодированы с помощью enc, а затем записаны в w. Кодирование base64 выполняется блоками по 4 байта; после завершения записи вызывающая сторона должна вызвать Close для возвращённого кодировщика, чтобы сбросить все частично записанные блоки.

Пример

Код:

input := []byte("foo\x00bar")
encoder := base64.NewEncoder(base64.StdEncoding, os.Stdout)
encoder.Write(input)
// Must close the encoder when finished to flush any partial blocks.
// If you comment out the following line, the last partial block "r"
// won't be encoded.
encoder.Close()

Вывод:

Zm9vAGJhcg==

type CorruptInputError

type CorruptInputError int64

func (CorruptInputError) Error

func (e CorruptInputError) Error() string

type Encoding

Encoding — это схема кодирования/декодирования с основанием 64, определяемая алфавитом из 64 символов. Наиболее распространённое кодирование — «base64», определённое в RFC 4648 и используемое в MIME (RFC 2045) и PEM (RFC 1421). RFC 4648 также определяет альтернативное кодирование: стандартное кодирование, в котором символы + и / заменены на - и _.

type Encoding struct {
    // contains filtered or unexported fields
}

func NewEncoding

func NewEncoding(encoder string) *Encoding

NewEncoding возвращает новое кодирование с заполнением, заданное указанным алфавитом. Алфавит должен быть строкой длиной 64 байта, содержащей уникальные значения байтов и не содержащей символ заполнения или CR / LF ('\r', '\n'). Алфавит рассматривается как последовательность значений байтов без специальной обработки многобайтового UTF-8. Полученное кодирование использует символ заполнения по умолчанию ('='), который можно изменить или отключить с помощью Encoding.WithPadding.

func (*Encoding) AppendDecode 1.22

func (enc *Encoding) AppendDecode(dst, src []byte) ([]byte, error)

AppendDecode добавляет декодированные из base64 данные src к dst и возвращает расширенный буфер. Если входные данные имеют неверный формат, функция возвращает частично декодированные данные src и ошибку. Символы новой строки (\r и \n) игнорируются.

func (*Encoding) AppendEncode 1.22

func (enc *Encoding) AppendEncode(dst, src []byte) []byte

AppendEncode добавляет закодированные в base64 данные src к dst и возвращает расширенный буфер.

func (*Encoding) Decode

func (enc *Encoding) Decode(dst, src []byte) (n int, err error)

Decode декодирует src с использованием кодирования enc. Функция записывает в dst не более Encoding.DecodedLen(len(src)) байт и возвращает количество записанных байт. Вызывающая сторона должна убедиться, что размер dst достаточен для всех декодированных данных. Если src содержит недопустимые данные base64, функция возвращает количество успешно записанных байт и CorruptInputError. Символы новой строки (\r и \n) игнорируются.

Пример

Код:

str := "SGVsbG8sIHdvcmxkIQ=="
dst := make([]byte, base64.StdEncoding.DecodedLen(len(str)))
n, err := base64.StdEncoding.Decode(dst, []byte(str))
if err != nil {
    fmt.Println("decode error:", err)
    return
}
dst = dst[:n]
fmt.Printf("%q\n", dst)

Вывод:

"Hello, world!"

func (*Encoding) DecodeString

func (enc *Encoding) DecodeString(s string) ([]byte, error)

DecodeString возвращает байты, представленные строкой base64 s. Если входные данные имеют неверный формат, функция возвращает частично декодированные данные и CorruptInputError. Символы новой строки (\r и \n) игнорируются.

Пример

Код:

str := "c29tZSBkYXRhIHdpdGggACBhbmQg77u/"
data, err := base64.StdEncoding.DecodeString(str)
if err != nil {
    fmt.Println("error:", err)
    return
}
fmt.Printf("%q\n", data)

Вывод:

"some data with \x00 and \ufeff"

func (*Encoding) DecodedLen

func (enc *Encoding) DecodedLen(n int) int

DecodedLen возвращает максимальную длину в байтах декодированных данных, соответствующих n байтам данных, закодированных в base64.

func (*Encoding) Encode

func (enc *Encoding) Encode(dst, src []byte)

Encode кодирует src с использованием кодирования enc, записывая в dst Encoding.EncodedLen(len(src)) байт.

Кодирование дополняет выходные данные до длины, кратной 4 байтам, поэтому Encode не подходит для отдельных блоков большого потока данных. Вместо этого используйте NewEncoder.

Пример

Код:

data := []byte("Hello, world!")
dst := make([]byte, base64.StdEncoding.EncodedLen(len(data)))
base64.StdEncoding.Encode(dst, data)
fmt.Println(string(dst))

Вывод:

SGVsbG8sIHdvcmxkIQ==

func (*Encoding) EncodeToString

func (enc *Encoding) EncodeToString(src []byte) string

EncodeToString возвращает представление src в кодировке base64.

Пример

Код:

data := []byte("any + old & data")
str := base64.StdEncoding.EncodeToString(data)
fmt.Println(str)

Вывод:

YW55ICsgb2xkICYgZGF0YQ==

func (*Encoding) EncodedLen

func (enc *Encoding) EncodedLen(n int) int

EncodedLen возвращает длину в байтах представления входного буфера длиной n в кодировке base64.

func (Encoding) Strict 1.8

func (enc Encoding) Strict() *Encoding

Strict создаёт новую кодировку, идентичную enc, но с включённым строгим декодированием. В этом режиме декодер требует, чтобы завершающие биты заполнения были нулевыми, как описано в разделе 3.5 RFC 4648.

Обратите внимание, что входные данные всё ещё можно модифицировать, поскольку символы новой строки (CR и LF) по-прежнему игнорируются.

func (Encoding) WithPadding 1.5

func (enc Encoding) WithPadding(padding rune) *Encoding

WithPadding создаёт новую кодировку, идентичную enc, но с указанным символом заполнения или NoPadding, чтобы отключить заполнение. Символ заполнения не должен быть '\r' или '\n', содержаться в алфавите кодировки или иметь отрицательное значение; кроме того, он должен быть rune со значением не выше '\xff'. Символы заполнения со значением выше '\x7f' кодируются как соответствующее значение байта, а не с использованием представления кодовой точки в UTF-8.

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/encoding/base64/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API