使用 base64.StdEncoding.DecodeString(str) 时输入字节 4 处的

我得到:错误: illegal base64 data at input byte 4


将 Base64Image 传入时base64.StdEncoding.DecodeString(str):


data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYA... 

让我知道您是否需要完整的 base64,我刚刚粘贴了第一部分,因为问题似乎在 4 个字节之内?


data, errBase := base64.StdEncoding.DecodeString(Base64Image)

if errBase != nil {

    fmt.Println("error:", errBase)

    return false

}

你知道为什么吗?


浮云间
浏览 469回答 3
3回答

莫回无

并非您尝试解码的所有输入字符串都是 Base64 编码形式。您拥有的是Data URI scheme,它提供了一种将数据内嵌在网页中的方法,就好像它们是外部资源一样。它的格式为:data:[<MIME-type>][;charset=<encoding>][;base64],<data>在您的情况下image/png是 MIME 类型,缺少可选字符集,并且";base64"是一个常量字符串,指示<data>使用 Base64 编码进行编码。要获取数据(即 Base64 编码形式),请切断逗号前的前缀(包括逗号):input := "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYA"b64data := input[strings.IndexByte(input, ',')+1:]fmt.Println(b64data)输出:iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYA您现在可以解码其中:data, err := base64.StdEncoding.DecodeString(b64data)if err != nil {&nbsp; &nbsp; fmt.Println("error:", err)}fmt.Println(data)输出:[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 100 0 0 0 100 8 6 0]在Go Playground上试一试。

江户川乱折腾

有时,如果您的 base64 字符串没有在末尾正确填充 ==,就会发生这种情况。

万千封印

如果您使用编码StdEncoding并尝试使用解码,也可能会发生这种情况RawStdEncoding
打开App,查看更多内容
随时随地看视频慕课网APP