Кодек 'utf-8' не может декодировать байт 0xa0 в позиции 0: недопустимый начальный байт django

Итак, у меня есть переменная, содержащаяся в байтах, и я хочу сохранить ее в str. но как это сделать? Я пробовал разные способы, но всегда получал ошибку

кодек 'utf-8' не может декодировать байт 0xa0 в позиции 0: недопустимый начальный байт

я хочу сохранить результат шифрования файла в текстовый файл. так у меня будет доказательство того, что файл был зашифрован. вот мои способы 1:

 def create_file(f):
     response = HttpResponse(content_type="text/plain")
     response['Content-Disposition'] = 'attachment; filename=file.txt'

     filename = f
     print(filename)
     name_byte = codecs.decode(filename)
     print(name_byte)

     return response

мои пути 2 :

def create_file(enc):
    with open("file.txt", "w", encoding="utf-8") as f:
        enc = enc.decode('utf-8')
        f.write(enc)

мои пути 3:

def create_file(f):
    file = open("file.txt", "w")
    f = f.decode('utf-8')
    download = file.write(f)
    file.close()
    print(download)

    return download

f = b'\xa0\x0e\xdc\x14' f - это результат работы encrypt

Если вы просто хотите записать всю строку в файл, то все, что вам нужно сделать, это преобразовать ее в строку.

Так это будет работать:

v = b'\xa0\x0e\xdc\x14'

with open("C:/test/output.txt", 'w') as file:
    file.write(str(v))

В результате получается текстовый файл следующего вида:

enter image description here

<<<Фраза "есть переменная в байтах и я хочу сохранить ее в str" вообще не имеет смысла. bytes и str - это разные типы данных, служащие разным целям. bytes хранит поток байтов, а str - абстрактный текст. Да, байты могут хранить текстовую информацию, закодированную в какой-либо кодировке, например UTF-8, но это лишь частный случай. Если, например, в байтах хранится изображение в формате JPEG, то преобразование его в str не имеет никакого смысла, просто потому что это не текст. Поэтому, если ваш зашифрованный файл содержит поток байтов, вы должны обращаться с ним как с таковым. Это больше не текст, пока вы его не расшифруете.

Поэтому единственное, что вы можете сделать, это сохранить поток байтов как есть, используя режим двоичного файла:

v = b'\xa0\x0e\xdc\x14'
with open ('/path', 'wb') as fo:
    fo.write(v)

То же самое касается отправки зашифрованного файла в качестве ответа Django:

response = HttpResponse(v, content_type="application/octet-stream")
response['Content-Disposition'] = 'attachment; filename=file.bin'
Вернуться на верх