2 回答
TA贡献1815条经验 获得超10个赞
Steven Penny 的回答显示了一种方法,但我不得不问:
你为什么打电话
url.PathUnescape
?数据不包含路径转义字符(无%
-encoding)。这个电话是无害的,但没有必要。为什么使用备用编码 (
URLEncoding
)?正如我们在base64 包文档中看到的,标准编码和备用编码之间的区别在于备用编码使用-
and_
代替+
and/
。但是如果我们查看数据字符串,它包含加号和斜线,并且没有破折号或下划线,因此它显然已经使用标准编码进行了编码。你为什么叫
base64.NoPadding
?输入数据以 结尾=
,这是一个填充字符。你为什么打电话给
base64.NoPadding
viabase64.URLEncoding.WithPadding(base64.NoPadding)
?文档告诉我们,这可以拼写base64.RawURLEncoding
。为什么你明确要求去除
+
字符(不是一个好主意)而不是/
字符?
如果我们删除所有这些(并为了发布目的而拆分一个长输入行),我们会得到这个(操场链接):
package main
import (
"encoding/base64"
"fmt"
)
func main() {
data := "iVBORw0KGgoAAAANSUhEUgAAAF0AAAABCAYAAAC8PaJPAAAABH" +
"NCSVQICAgIfAhkiAAAALVJREFUGFdt0MsKQVEYhuG9CeU0Vgam" +
"ihBl6hqMXYoLchduQFuKicyFARPn0/J+9Q2tevrba639H1YcQh" +
"hHUTTBACloFZHFw3FJbODj7xdxjSqmqGCHms+3vv8m3nDwWSA+" +
"vVcipjFHHlcMcUTBtcuueSHqfgzlVJ7Nn/o99s5Qf3v0sUAHK/" +
"//JbahmZQ3gy4S96OZc9A90fkdepM6tNTHDOqz6T3NofeTluuq" +
"V82oHOrphNEPw3UwfBVmbU4AAAAASUVORK5CYII="
b, err := base64.StdEncoding.DecodeString(data)
if err != nil {
fmt.Printf("Failed to decode: %s\n", err)
} else {
fmt.Printf("bytes begin with: %q\n", b[0:4])
}
}
TA贡献1936条经验 获得超6个赞
这似乎工作正常:
package main
import (
"encoding/base64"
"image"
"image/png"
"os"
"strings"
)
func main() {
s := `iVBORw0KGgoAAAANSUhEUgAAAF0AAAABCAYAAAC8PaJPAAAABHNCSVQICAgIfAhkiAAAALVJ
REFUGFdt0MsKQVEYhuG9CeU0VgamihBl6hqMXYoLchduQFuKicyFARPn0/J+9Q2tevrba639H1YcQhhHU
TTBACloFZHFw3FJbODj7xdxjSqmqGCHms+3vv8m3nDwWSA+vVcipjFHHlcMcUTBtcuueSHqfgzlVJ7Nn/
o99s5Qf3v0sUAHK///JbahmZQ3gy4S96OZc9A90fkdepM6tNTHDOqz6T3NofeTluuqV82oHOrphNEPw3U
wfBVmbU4AAAAASUVORK5CYII=`
d := base64.NewDecoder(base64.StdEncoding, strings.NewReader(s))
p, e := png.Decode(d)
if e != nil {
panic(e)
}
c, e := os.Create("a.png")
if e != nil {
panic(e)
}
png.Encode(c, p.(*image.NRGBA))
}
- 2 回答
- 0 关注
- 143 浏览
添加回答
举报