Chrome通过转换为UTF-8来破坏二进制文件下载

时间:2017-07-27 08:35:21

标签: python google-chrome flask utf-8

我目前已被指派维护使用Flask编写的应用程序。目前我正在尝试添加允许用户下载预生成的Excel文件的功能,但是,每当我尝试发送它时,我的浏览器似乎会重新编码UTF-8中的文件,导致多字节字符被添加,这会破坏文件。

使用wget:

下载文件
(venv) luke@ubuntu:~$ hexdump -C wget.xlsx | head -n 2
00000000  50 4b 03 04 14 00 00 00  08 00 06 06 fb 4a 1f 23  |PK...........J.#|
00000010  cf 03 c0 00 00 00 13 02  00 00 0b 00 00 00 5f 72  |.............._r|

使用Chrome下载的文件(请注意EF BF BD序列?)

(venv) luke@ubuntu:~$ hexdump -C chrome.xlsx | head -n 2
00000000  50 4b 03 04 14 00 00 00  08 00 ef bf bd 03 ef bf  |PK..............|
00000010  bd 4a 1f 23 ef bf bd 03  ef bf bd 00 00 00 13 02  |.J.#............|

有谁知道如何解决这个问题?这是我使用的代码:

data = b'PK\x03\x04\x14\x00\x00\x00\x08\x00}\x0c\xfbJ\x1f#\xcf\x03\xc0\x00\x00\x00\x13\x02\x00\x00\x0b\x00\x00\x00'
send_file(BytesIO(data), attachment_filename="x.xlsx", as_attachment=True)

相关问题:Encoding problems trying to send a binary file using flask_restful

1 个答案:

答案 0 :(得分:1)

Chrome希望收到utf-8编码文本,并发现一些字节无法解释为char的有效utf-8编码 - 这是正常的,因为您的文件是二进制文件。所以它用EF BF BD替换了这些无效字节,这是Unicode替换字符的utf-8编码。您发送的content-type标题可能是text/....。也许尝试像Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

这样的东西
相关问题