【发布时间】:2016-05-28 08:50:01
【问题描述】:
Python 后端读取二进制文件,对其进行 base64 编码,将其插入 JSON 文档并将其发送到 JavaScript 前端:
#Python
with open('some_binary_file', 'rb') as in_file:
return base64.b64encode(in_file.read()).decode('utf-8')
JavaScript 前端从 JSON 文档中获取 base64 编码的字符串并将其转换为二进制 blob:
#JavaScript
b64_string = response['b64_string'];
decoded_file = atob(b64_string);
blob = new Blob([decoded_file], {type: 'application/octet-stream'});
不幸的是,在下载 blob 时,编码似乎是错误的,但我不确定问题出在哪里。例如。这是一个我无法再打开的 Excel 文件。在 Python 部分,我尝试了不同的解码器('ascii'、'latin1'),但这并没有什么不同。我的代码有问题吗?
【问题讨论】:
-
这段代码看起来不错,你说的似乎是错误的是什么意思?
-
正如我所补充的,我无法打开生成的文件(在本例中为 Excel 文件)。
-
某些查看器打开文件时的内容是什么?文件的大小缩小了吗?
-
文件实际上变大了,从 9kb 到 11kb。文件内容似乎是正确的内容,各种乱码穿插。我可以阅读很多文件,但里面也有很多奇怪的字符。
-
能不能用记事本打开看看里面有没有base64的文字?我怀疑您要么不对数据进行解码,要么对其进行两次编码,因为大小的增长与您在保存之前仅对文件进行 base64 编码时一样多。
标签: javascript python json encoding