为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
浮云间 2021-10-18 14:14:52
我得到:错误: 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}你知道为什么吗?
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

并非您尝试解码的所有输入字符串都是 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 {

    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上试一试。


查看完整回答
反对 回复 2021-10-18
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

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


查看完整回答
反对 回复 2021-10-18
?
万千封印

TA贡献1891条经验 获得超3个赞

如果您使用编码StdEncoding并尝试使用解码,也可能会发生这种情况RawStdEncoding


查看完整回答
反对 回复 2021-10-18
  • 3 回答
  • 0 关注
  • 463 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信