我目前已被指派维护使用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
答案 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