如何在Python中从btoa(unescape(encodeURIComponent(file)))解码utf-8文件?

时间:2018-09-06 11:01:55

标签: javascript python utf-8 decode encode

我想将输入HTML文件的任何文件(Word,PDF,图像...)上传到python服务器。
借助于snakecharmerb(Upload file as JSON to Python webserver),我可以通过以下方式在JavaScript中对文件进行编码来发送文件:

function fileChange(event) {
    const file = event.target.files[0];
    const fileReader = new FileReader();
    fileReader.onload = function(e) {
        const encodedFile = btoa(unescape(encodeURIComponent(e.target.result)));
        uploadFile(JSON.stringify(encodedFile), file.name);
    }
    fileReader.readAsText(file);
}

在Python中,我可以通过以下方式读取和保存文件:

import json
from base64 import b64decode

binary_data = b64decode(json.loads(file));
with open(file_name, "wb") as f:
    f.write(binary_data)

但是生成的文件不可读或内容编码不正确。我想我需要在utf-8中编码binary_data。但是binary_data.encode("utf-8")会导致错误。

test_file.txt

Hello World!
Special chars: äöüß

Python错误

UnicodeDecodeError('ascii', 'Hello World!\r\nSpecial chars: \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd', 29, 30, 'ordinal not in range(128)')

我还尝试将其与.decode('string_escape')

结合使用

0 个答案:

没有答案