Пакет 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, 世界
Индекс
Примеры
Файлы пакета
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. Данные, записанные в возвращаемый объект-писатель, будут закодированы с использованием enc и затем записаны в w. Кодирование base64 работает с блоками из 4 байт; после завершения записи вызывающая сторона должна закрыть возвращаемый кодировщик, чтобы очистить любые частично записанные блоки.
Пример
Код:
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==
тип CorruptInputError
type CorruptInputError int64
func (CorruptInputError) Error
func (e CorruptInputError) Error() string
тип 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 возвращает новый Encoding, определенный заданным алфавитом, который должен быть строкой из 64 байтов, содержащей уникальные байтовые значения и не содержащей символ заполнения или CR/LF ('\r', '\n'). Алфавит обрабатывается как последовательность байтовых значений без какого-либо специального обработки для многобайтовых UTF-8. Результирующий Encoding использует символ заполнения по умолчанию ('='), который может быть изменен или отключен с помощью Encoding.WithPadding.
func (*Encoding) AppendDecode 1.22
func (enc *Encoding) AppendDecode(dst, src []byte) ([]byte, error)
AppendDecode добавляет декодированный в base64 src к dst и возвращает расширенный буфер. Если входной данные некорректны, он возвращает частично декодированный src и ошибку.
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. Он записывает не более 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.
Пример
Код:
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, записывая Encoding.EncodedLen(len(src)) байтов в dst.
Кодирование добавляет заполнители, чтобы результат был кратен 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 возвращает base64 кодирование src.
Пример
Код:
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 возвращает длину в байтах base64 кодирования входного буфера длиной n.
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/