encoding/base64
·1 min
Table of Contents
简介 #
- base64是一种用64个字符来表示任意二进制数据的方法
用途 #
- 用于在HTTP协议下传输二进制数据
- 用于在URL中传输参数
- 用于加密
- 用于数据校验,数据压缩,数据编码
Go #
在Go语言中,encoding/base64包实现了base64编码和解码
它们分别为base64.StdEncoding,base64.URLEncoding, base64.RawStdEncoding, base64.RawURLEncoding
base64.StdEncoding #
- 标准base64编码,使用的字符集为A-Z,a-z,0-9,+,/以及填充字符=,编码后的字符串长度为4的倍数
在接入sd3
,返回接口的格式为base64.StdEncoding,但是错误的使用了base64.RawStdEncoding
,导致解码失败,但是出来的图片经过上传,能在浏览器中显示,但是在代码中一直抛出error
base64.URLEncoding #
- URL兼容的base64编码,使用的字符集为A-Z,a-z,0-9,-,_以及填充字符=,编码后的字符串长度为4的倍数
base64.RawStdEncoding #
- 标准base64编码,使用的字符集为A-Z,a-z,0-9,+,/,不需要填充字符=,编码后的字符串不会做任何填充
base64.RawURLEncoding #
- URL兼容的base64编码,使用的字符集为A-Z,a-z,0-9,-,_,不需要填充字符=,编码后的字符串不会做任何填充
例子 #
package main
import (
	"encoding/base64"
	"fmt"
)
// @Title        main.go
// @Description
// @Create       XdpCs 2024-06-11 10:15
// @Update       XdpCs 2024-06-11 10:15
func main() {
	data := []byte("Hello//")
	// base64.StdEncoding
	dst := make([]byte, base64.StdEncoding.EncodedLen(len(data)))
	base64.StdEncoding.Encode(dst, data)
	fmt.Println("base64.StdEncoding: ", string(dst))
	fmt.Println("base64.StdEncoding len: ", len(dst))
	// base64.RawStdEncoding
	dst = make([]byte, base64.RawStdEncoding.EncodedLen(len(data)))
	base64.RawStdEncoding.Encode(dst, data)
	fmt.Println("base64.RawStdEncoding: ", string(dst))
	fmt.Println("base64.RawStdEncoding len: ", len(dst))
	// base64.URLEncoding
	dst = make([]byte, base64.URLEncoding.EncodedLen(len(data)))
	base64.URLEncoding.Encode(dst, data)
	fmt.Println("base64.URLEncoding: ", string(dst))
	fmt.Println("base64.URLEncoding len: ", len(dst))
	// base64.RawURLEncoding
	dst = make([]byte, base64.RawURLEncoding.EncodedLen(len(data)))
	base64.RawURLEncoding.Encode(dst, data)
	fmt.Println("base64.RawURLEncoding: ", string(dst))
	fmt.Println("base64.RawURLEncoding len: ", len(dst))
}