base64 转二进制后,二进制无法解码成正常字符串。
我尝试了以下这几种编码,都无法解码:
utf8 、ISO-8859-5 、KOI8-R 、Windows-1251 、IBM855
但用 js 前端可以正常解码,是一串西里尔字母。
原码如下:
# -*- coding: utf-8 -*- import base64 import chardet a = '0JLQvtC70LXQudCx0L7Quy4g0KfQtdC80L/QuNC+0L3QsNGCINCg0L7RgdGB0LjQuC4gUGFyaSDQodGD0L/QtdGA0LvQuNCz0LAuINCc0YPQttGH0LjQvdGLLiAi0JvQvtC60L7QvNC+0YLQuNCyIiAo0J3QvtCy0L7RgdC40LHQuNGA0YHQuikgLSAi0JTQuNC90LDQvNC+LdCb0J4iICjQm9C10L3QuNC90LPRgNCw0LTRgdC60LDRjyDQvtC==' def base64decode(base64_str): if '==' not in base64_str: base64_str = base64_str + '==' bytes_str = base64.b64decode(base64_str) print(bytes_str) encoding = chardet.detect(bytes_str)['encoding'] return bytes_str.decode(encoding=encoding) print(base64decode(a))
![]() | 1 Pastsong 2023-02-03 18:27:55 +08:00 via Android base64 里没 /吧 |
2 voidemoer 2023-02-03 18:29:02 +08:00 因为里面本来就有不可见字符 /非法字符不在任何编码方式中,可以 decode(‘utf-8’,'ignore'),使用 ignore 参数略过不在 utf-8 编码范围的字符就能出来了 |
![]() | 3 imaple 2023-02-03 18:31:07 +08:00 这串一共 257 个字符,减掉 2 个=,也就是有(255*6-4)位除以八没法除尽 |
![]() | 4 imaple 2023-02-03 18:36:39 +08:00 另外看你的代码,自己给 base64 附加了==,这显然不合理,不会你的 base64encode 代码也有相关的逻辑,那肯定是错的 |
![]() | 5 jfcherng 2023-02-03 18:37:48 +08:00 用 latin1 |
6 deplivesb 2023-02-03 18:50:14 +08:00 你这个 手动给 编码强行添加俩== 的操作就没看懂 if '==' not in base64_str: base64_str = base64_str + '==' 最后的=只有在字符数量不是 4 的倍数才在末尾用=补齐,你这个不判断数量,直接加俩==是啥操作? |