一次Base64编码图片url遇到的问题

最近在做一个项目的时候遇到了一个问题,为了解决这个问题花了不少时间,在此记录下来方便日后遇到类似的问题可以帮助解决。

问题描述

项目是利用golang程序生成一个NBA季后赛排名预测的图片。因为要把NBA球队的简称文字拼到图片上,所以这些问题要转换成base64编码。然后,后来我发现"快船"这个队似乎不受欢迎,调试的时候我每次加上这个球队,生成的图片上传到七牛云就报错。

一次Base64编码图片url遇到的问题

错误文案提示是有错误字符。并且访问生成的url也返回400错误吗。

一次Base64编码图片url遇到的问题

发现问题

百度搜索了半天有一些思路,但是还是没有找到根本原因。后来干脆详细看一下base64的百科。

一次Base64编码图片url遇到的问题

简单来说base64就是用64个字符组成的一种编码方式,其中26个大写字母,26个小写字母,10个数字,最后两个一个是'+',另一个是'/'。问题就出在这两个字符了。

有了思路后我看了一下球队名的编码结果,除了快船是5b+r6Ii5,还有雄鹿是6ZuE6bm/,篮网是56+u572R,实时证明果然这几个队名有问题。

解决问题

到这里我大概也猜到了,+和/是不能组成url的特殊字符,通常在url中+被替换成了%2B,%2F。然而,替换后也并没有解决问题。

继续查资料,网上很多文章推荐的方法是可以把'+'替换成'-'把'/'替换成'_',终于解决了。

另外,golang提供的base64.URLEncoding.EncodeToString() 方法也可以解决此问题。

一次Base64编码图片url遇到的问题

其他

要说一下写文档一定要严谨,因为很多你碰到的问题可能别人也会碰到,如果因为你的笔误导致别人云里雾里就没有起到帮助别人的目的。

首先还是要感谢提供帮助的人,https://www.weibo.com/ttarticle/p/show?id=2313501000014237980410740990的作者,但是最后的笔误导致我又多花了不少时间。

另外,2019年希望雷霆季后赛有满意的结果,雷霆总冠军!

欢迎关注微信公众号『野狐』

相关文章: