有一种方法可以将字符串编码为Base64或从Base64解码字符串,而不需要在字符串末尾添加填充符?我指的是“==”结尾。我使用base64.URLEncoding.EncodeToString来编码,它工作得很好,但是我没有看到一种方法来决定在结尾不使用填充(就像java一样)。
base64.URLEncoding.EncodeToString
v9tzhpje1#
Go1.5将在Encoding上有一个WithPadding选项。这也将添加2个预定义编码RawStdEncoding和RawURLEncoding,它们将没有填充。虽然你使用的是应用引擎,暂时还不能访问Go1.5,但你可以根据需要创建一些帮助函数来添加和删除填充。下面是一个编码和解码字符串的例子。如果需要,可以很容易地使用[]byte对其进行修改,使其工作效率更高。
Encoding
WithPadding
RawStdEncoding
RawURLEncoding
[]byte
func base64EncodeStripped(s string) string { encoded := base64.StdEncoding.EncodeToString([]byte(s)) return strings.TrimRight(encoded, "=") } func base64DecodeStripped(s string) (string, error) { if i := len(s) % 4; i != 0 { s += strings.Repeat("=", 4-i) } decoded, err := base64.StdEncoding.DecodeString(s) return string(decoded), err }
ruarlubt2#
简单地说,使用base64.RawStdEncoding.EncodeToString代替base64.StdEncoding.EncodeToString否则使用base64.RawURLEncoding.EncodeToString代替base64.URLEncoding.EncodeToString。参考:参见源代码注解第94至110行:
base64.RawStdEncoding.EncodeToString
base64.StdEncoding.EncodeToString
base64.RawURLEncoding.EncodeToString
// RawURLEncoding is the unpadded alternate base64 encoding defined in RFC 4648. // It is typically used in URLs and file names. // This is the same as URLEncoding but omits padding characters.
6ljaweal3#
编码:
str := "encode this" encodedStr := base64.StdEncoding. WithPadding(base64.NoPadding). EncodeToString([]byte(str)) fmt.Println(encodedStr)
解码:
data, err := base64. StdEncoding.WithPadding(base64.NoPadding). DecodeString(encodedStr) if err != nil { fmt.Println(err) } fmt.Println(string(data))
去Playground:https://go.dev/play/p/TAZgLMSSe-K
3条答案
按热度按时间v9tzhpje1#
Go1.5将在
Encoding
上有一个WithPadding
选项。这也将添加2个预定义编码
RawStdEncoding
和RawURLEncoding
,它们将没有填充。虽然你使用的是应用引擎,暂时还不能访问Go1.5,但你可以根据需要创建一些帮助函数来添加和删除填充。
下面是一个编码和解码字符串的例子。如果需要,可以很容易地使用
[]byte
对其进行修改,使其工作效率更高。ruarlubt2#
简单地说,
使用
base64.RawStdEncoding.EncodeToString
代替base64.StdEncoding.EncodeToString
否则
使用
base64.RawURLEncoding.EncodeToString
代替base64.URLEncoding.EncodeToString
。参考:参见源代码注解第94至110行:
6ljaweal3#
编码:
解码:
去Playground:https://go.dev/play/p/TAZgLMSSe-K