Как декодировать файлы utf-8 из btoa (unescape (encodeURIComponent (file))) в Python? - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу загрузить любой файл (Word, PDF, Image ...) с вводом файла HTML на сервер python.
С помощью snakecharmerb ( Загрузить файл в формате JSON на веб-сервер Python ) я могу отправить файл, кодировав его следующим образом в 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.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')

...