2010-10-09 3 views
0

Какой тип кодека лучше всего кодировать двоичные файлы, которые загружаются в приложение, пишите в Python 3?Кодирование байтов в Python3

+2

Какие файлы? Почему они должны быть закодированы? –

+0

Любой, я тестирую изображение и когда я использовал «raw_unicode_escape», потому что utf-8 дублирует размер файла, но при этом файл сохраняет исходный размер, но говорит об этом, когда я открываю: (Таблица квантования 0x01 была не определено) – hidura

+3

В Python 3 изображения должны быть нигде рядом с кодировкой string/unicode. Они должны быть загружены, обработаны и сохранены в виде байтов. Почему вы должны указать 'raw_unicode_escape'? Каков тип изображения при его загрузке? –

ответ

0

Я знаю, что это поздний ответ, и вопрос не полностью ясно, но если вам нужно закодировать строку байтов, которую нужно сохранить где-то, и по какой-то причине вы не можете просто сохранить двоичные данные , вы должны закодировать строку с помощью модуля base64. Например, у вас есть длинная строка байтов (в этом случае генерируется с os.urandom(100):

import base64 
import os 
some_bytes = os.urandom(100) 
print(repr(some_bytes)) 

some_bytes_base64 = base64.standard_b64encode(some_bytes).decode() 
print(some_bytes_base64) 

Это печатает что-то вроде следующего:

b'\xd3\xa3\x0eT/L\xc6\x88\x98\xd0i\xbaa\xb2\x18\x1bx\xde\xf6Zq\xbe\xd9\xb4D\x19\x14\x91Z}wg?\x90\xd7f\xca\x1bxX\xa8\x99\xe6\xbb\xe0\x80\xa3\xc4\xb8\x1f\xfcp\xbc\x8d:/\xcfk\x01\xee\xc1\xde\xdc\xc3\xfa\x0e|7\x8eYt\xd1\x0b\x8a\x89\x9c^\xcf\xbc\\\x00_\x89dyb\x13\xa8\xdb\xba\xe3\x85X\x8d\x1a\x8bz\xe5\xfb\r' 

06MOVC9MxoiY0Gm6YbIYG3je9lpxvtm0RBkUkVp9d2c/kNdmyht4WKiZ5rvggKPEuB/8cLyNOi/PawHuwd7cw/oOfDeOWXTRC4qJnF7PvFwAX4lkeWITqNu644VYjRqLeuX7DQ== 

Как вы можете видеть, строка была правильно закодированы. метод decode() преобразует байт буквального, что base64.standard_b64encode обычно возвращается к стандартной строке. This answer описывает byte literals хорошо, на мой взгляд.

Это позволит вам передавать файл, последовательность байтов и т. д. без проблем. (В конце концов, разве это не было Base64 encoding для?)

Смежные вопросы