随便在网上看了一下 Base64 编码的原理,就开始写起代码了。不出所料,没一会就遇到了问题。把字符串转为二进制,怎么转,然后用什么存?转二进制还是比较简单的,但是要转成相应的位数(8 位),存储用字符串明显不合适,列表是一个好的选择。然后又需要把每六位二进制转为十进制,然后映射到 Base64 的字符。
但是遇到中文等其他超出 ASCII 编码的字符,转成二进制超过了 8 位,Base64 编码后的字符串并不规则,解码时就不知怎么处理了。
于是想到用 utf-8 编码一下之后再用 Base64 编码。在网上查找相应的函数,但没有符合预期的。陷入苦恼,在想能不能自己实现一下。看了一下 Python 的 utf-8 编码,有点看不懂,变长处理成十六进制表示。然后想着我也这样处理一下,直接把字符转成开头的字符。转了之后解码呢?而且这样长度也变长了很多。还是去网上仔细看一下 utf-8 到底是怎么编码的吧。
果然,utf-8 编码字符的思路很清晰,在某个范围内字符对应的数值,编码成对应格式的二进制,兼容 ASCII。现在按照对应范围转成对应的二进制就行了。实际操作下来,还是遇到了一点问题,怎么优雅地转成对应格式?
最终正确把字符串 Base64 编码了,那么解码反着来就行了。这一次,相比之前,思路清晰,配合之前写的处理函数,没多久就写出来了。
这一次,在网上找到了许多有意思的函数,学习还是要靠实践。而犯的最大的错误,或许就是什么都没想好就开始写代码了,以致一开始弄得一塌糊涂。折腾,这就很舒服。
领取专属 10元无门槛券
私享最新 技术干货