Issue
here is my code and i don’t understand why the decode function doesn’t work.
Little insight would be great please.
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)
}
It gaves me :
[Decode error – output not utf-8][Decode error – output not utf-8]
Solution
DecodedLen
returns the maximal length.
This length is useful for sizing your buffer but part of the buffer won’t be written and thus won’t be valid UTF-8.
You have to use only the real written length returned by the Decode
function.
l, _ := base64.StdEncoding.Decode(base64Text, []byte(message))
log.Printf("base64: %s\n", base64Text[:l])
Answered By – Denys Séguret
Answer Checked By – Willingham (GoLangFix Volunteer)