一尘不染

编码/解码base64

go

这是我的代码,我不明白为什么解码功能不起作用。

请少有洞察力会很棒。

func EncodeB64(message string) (retour string) {
    base64Text := make([]byte, base64.StdEncoding.EncodedLen(len(message)))
    base64.StdEncoding.Encode(base64Text, []byte(message))
    return string(base64Text)
}

func DecodeB64(message string) (retour string) {
    base64Text := make([]byte, base64.StdEncoding.DecodedLen(len(message)))
    base64.StdEncoding.Decode(base64Text, []byte(message))
    fmt.Printf("base64: %s\n", base64Text)
    return string(base64Text)
}

它给了我:[解码错误-输出不是utf-8] [解码错误-输出不是utf-8]


阅读 227

收藏
2020-07-02

共1个答案

一尘不染

DecodedLen返回 最大 长度。

此长度对于调整缓冲区大小很有用,但是不会写入缓冲区的一部分,因此将不是有效的UTF-8。

您只需要使用Decode函数返回的实际写入长度即可。

l, _ := base64.StdEncoding.Decode(base64Text, []byte(message))
log.Printf("base64: %s\n", base64Text[:l])
2020-07-02