猿问

编码/解码 base64

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


一点点洞察力会很好。


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]


蛊毒传说
浏览 233回答 3
3回答

holdtom

DecodedLen返回最大长度。此长度对于调整缓冲区大小很有用,但不会写入缓冲区的一部分,因此不会是有效的 UTF-8。您必须仅使用Decode函数返回的实际写入长度。l, _ := base64.StdEncoding.Decode(base64Text, []byte(message))log.Printf("base64: %s\n", base64Text[:l])

胡子哥哥

len 前缀是肤浅的,会导致无效的 utf-8 错误:package mainimport (        "encoding/base64"        "fmt"        "log")func main() {        str := base64.StdEncoding.EncodeToString([]byte("Hello, playground"))        fmt.Println(str)        data, err := base64.StdEncoding.DecodeString(str)        if err != nil {                log.Fatal("error:", err)        }        fmt.Printf("%q\n", data)}输出SGVsbG8sIHBsYXlncm91bmQ="Hello, playground"编辑:我读得太快了,len 没有用作前缀。dystroy 做对了。
随时随地看视频慕课网APP

相关分类

Go
我要回答