©
本文档使用 PHP中文网手册 发布
import "encoding/base64"
Overview
Index
Examples
包base64实现了RFC 4648规定的base64编码。
package mainimport ("encoding/base64""fmt")func main() { 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))}
Constants
Variables
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) 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
Package Encoding.DecodeString Encoding.EncodeToString NewEncoder
base64.go
const ( StdPadding rune = '=' // Standard padding character NoPadding rune = -1 // No padding)
RawStdEncoding是RFC 4648第3.2节中定义的标准原始未加标签的base64编码。这与StdEncoding相同,但省略了填充字符。
var RawStdEncoding = StdEncoding.WithPadding(NoPadding)
RawURLEncoding是在RFC 4648中定义的无衬垫的备用base64编码。它通常用于URL和文件名。这与URLEncoding相同,但省略了填充字符。
var RawURLEncoding = URLEncoding.WithPadding(NoPadding)
StdEncoding是RFC 4648中定义的标准base64编码。
var StdEncoding = NewEncoding(encodeStd)
URLEncoding是RFC 4648中定义的备用base64编码。它通常用于URL和文件名。
var URLEncoding = NewEncoding(encodeURL)
func NewDecoder(enc *Encoding, r io.Reader) io.Reader
NewDecoder构造一个新的base64流解码器。
func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser
NewEncoder返回一个新的base64流编码器。写入返回的作者的数据将使用enc进行编码,然后写入w。Base64编码以4字节块运行; 写完后,调用者必须关闭返回的编码器以刷新任何部分写入的块。
package mainimport ("encoding/base64""os")func main() { 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()}
type CorruptInputError int64
func (e CorruptInputError) Error() string
编码是基数为64的编码/解码方案,由64个字符的字母表定义。最常见的编码是RFC 4648中定义的“base64”编码,用于MIME (RFC 2045)和PEM(RFC 1421)。RFC 4648还定义了一种替代编码,这是使用 - 和_代替+和/的标准编码。
type Encoding struct { // contains filtered or unexported fields}
func NewEncoding(encoder string) *Encoding
NewEncoding返回由给定字母表定义的新填充编码,该编码必须是不包含填充字符或CR / LF('\ r','\ n')的64字节字符串。生成的编码使用默认填充字符('='),可以通过WithPadding更改或禁用该字符。
func (enc *Encoding) Decode(dst, src []byte) (n int, err error)
解码使用enc编码解码src。它至多将DecodedLen(len(src))字节写入dst并返回写入的字节数。如果src包含无效的base64数据,它将返回成功写入的字节数和CorruptInputError。换行符(\ r和\ n)被忽略。
func (enc *Encoding) DecodeString(s string) ([]byte, error)
DecodeString返回由base64字符串s表示的字节。
package mainimport ("encoding/base64""fmt")func main() { str := "c29tZSBkYXRhIHdpdGggACBhbmQg77u/" data, err := base64.StdEncoding.DecodeString(str)if err != nil { fmt.Println("error:", err)return} fmt.Printf("%q\n", data)}
func (enc *Encoding) DecodedLen(n int) int
DecodedLen返回对应于n个字节的base64编码数据的解码数据的最大字节长度。
func (enc *Encoding) Encode(dst, src []byte)
使用编码enc对编码src进行编码,将EncodedLen字节写入dst。
编码将输出填充到4个字节的倍数,因此Encode不适用于大数据流的各个块。改用NewEncoder()。
func (enc *Encoding) EncodeToString(src []byte) string
EncodeToString返回src的base64编码。
package mainimport ("encoding/base64""fmt")func main() { data := []byte("any + old & data") str := base64.StdEncoding.EncodeToString(data) fmt.Println(str)}
func (enc *Encoding) EncodedLen(n int) int
EncodedLen返回长度为n的输入缓冲区的base64编码的字节长度。
func (enc Encoding) Strict() *Encoding
除严格解码启用之外,严格创建与enc相同的新编码。在这种模式下,解码器要求尾部填充位为零,如RFC 4648第3.5节所述。
func (enc Encoding) WithPadding(padding rune) *Encoding
WithPadding创建一个与enc相同的新编码,除了指定的填充字符或NoPadding禁用填充。填充字符不能是'\r'或'\n',不能包含在编码的字母表中,并且必须是等于或低于'\xff'的符文。