尝试对 base64 解码时出现了 “illegal base64 data” 的错误。

huangapple go评论87阅读模式
英文:

"illegal base64 data" when trying to base64 decode

问题

我在Go语言中尝试使用以下代码解码一个有效的(根据我的理解)base64编码的字符串:

data, err := base64.StdEncoding.DecodeString(s)
if err != nil {
    ...
}

一个完整的示例在这里。我有一个字符串"eyJlbWFpbF9hZGRyZXNzIjoiIiwiZXhwIjoxNDQ3NzIzMzY4LCJmaXJzdG5hbWUiOiIiLCJpYXQiOjE0NDc0NjQxNjgsImlzcyI6Imh0dHA6Ly91ZGFjaXR5LmNvbSIsImtpZCI6ImE3ZTg5ZWQyMSIsImxhc3RuYW1lIjoiIiwidXNlcl9pZCI6IjEyMzQ1Njc4IiwidXNlcm5hbWUiOiJoYW5zb2xvQGhvdGguY29tIn0",可以在这里或者甚至在你的浏览器控制台中使用atob(that_string);正确解码,但是出于某种原因,Go语言报错:

illegal base64 data at input byte 236

请注意,我可以解码其他一些字符串。那么为什么我不能在Go语言中对一个有效的编码字符串进行base64解码呢?

英文:

I tried to decode a valid (based on my understanding) base64 encoded string in Go with:

data, err := base64.StdEncoding.DecodeString(s)
if err != nil {
     ...
}

A full example is here. I have a string "eyJlbWFpbF9hZGRyZXNzIjoiIiwiZXhwIjoxNDQ3NzIzMzY4LCJmaXJzdG5hbWUiOiIiLCJpYXQiOjE0NDc0NjQxNjgsImlzcyI6Imh0dHA6Ly91ZGFjaXR5LmNvbSIsImtpZCI6ImE3ZTg5ZWQyMSIsImxhc3RuYW1lIjoiIiwidXNlcl9pZCI6IjEyMzQ1Njc4IiwidXNlcm5hbWUiOiJoYW5zb2xvQGhvdGguY29tIn0", which can be properly decoded for example here
or even in your browser's console with atob(that_string);, but for some reason go complains with:

illegal base64 data at input byte 236

Notice, that I can decode some other strings. So why can not I base64decode a valid encoded string in Go?

答案1

得分: 10

您的输入没有任何填充。因此,您应该使用base64.RawStdEncoding而不是base64.StdEncoding

data, err := base64.RawStdEncoding.DecodeString(s)

示例:https://play.golang.org/p/ZWfzYXQ5Ye

英文:

Your input does not have any padding. Therefore, you should use base64.RawStdEncoding over base64.StdEncoding:

data, err := base64.RawStdEncoding.DecodeString(s)

Example: https://play.golang.org/p/ZWfzYXQ5Ye

huangapple
  • 本文由 发表于 2015年11月14日 09:43:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/33704251.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定