Преобразование Unicode в двоичный

Я пытаюсь преобразовать арабский текст в utf8 закодированные байты, а затем в двоичный, используя этот ответ здесь.

Во-первых, я использовал код, как в примере:

'{:b}'.format(int(u'سلام'.encode('utf-8').encode('hex'), 16))

Но я получил эту ошибку:

AttributeError: 'bytes' object has no attribute 'encode'

Также я удалил .encode('hex'), но все равно выдает ту же ошибку.

Есть ли способ преобразовать коды utf8 в двоичные и наоборот?


person Nujud    schedule 22.12.2017    source источник
comment
@pstatix, а как мне сделать обратное? из бит в utf8   -  person Nujud    schedule 23.12.2017
comment
вы не кодируете utf8 во что-то, оно уже закодировано в последовательности байтов, вы можете декодировать его только в текст (текст изначально был закодирован в utf-8, это была ваша отправная точка)   -  person progmatico    schedule 23.12.2017
comment
чтобы сделать обратное кодированию, вы декодируете.   -  person progmatico    schedule 23.12.2017
comment
@SCB Я хочу использовать двоичный файл в целях безопасности в своей программе. Поэтому мне сначала нужны они в двоичном формате, затем используйте только эту двоичную строку, и когда я снова получил двоичный файл, я хочу поддержать его в utf8.   -  person Nujud    schedule 23.12.2017


Ответы (1)


Как насчет этого:

>>> ''.join('{:08b}'.format(b) for b in 'سلام'.encode('utf8'))
'1101100010110011110110011000010011011000101001111101100110000101'

Это повторяет закодированный объект bytes, где вы получаете целое число в диапазоне 0..255 для каждой итерации. Затем целое число форматируется в двоичной записи с заполнением нулями до 8 цифр. Затем склейте все вместе с помощью str.join().

Для обратного подхода подход, указанный в ответе на вопрос, на который вы ссылались, может быть адаптирован к Python 3 следующим образом (s - это результат приведенного выше примера, т.е. str из 0 и 1):

>>> bytes(int(b, 2) for b in re.split('(........)', s) if b).decode('utf8')
'سلام'
person lenz    schedule 23.12.2017