декодирование base64 и строка согласования байтов - PullRequest
0 голосов
/ 26 мая 2019

У меня есть строка в кодировке base64 sZCLmg==, которая Note. Я пытаюсь декодировать его с помощью base64, а затем использовать согласование байтов для возврата строки Note.

import base64
encoded = 'sZCLmg==' #sZCLmg==  Note
data = base64.b64decode(encoded)
print data

mylist = []
mylist.append(data)
#print mylist[0][0]
bytes = mylist[0][0]
print (bytes ^ 0xFF)

но я получаю ошибку: ValueError: недопустимый литерал для int () с основанием 10: '\ xb1' Любая идея, пожалуйста, что я делаю не так, чтобы получить оригинальную строку Note?

1 Ответ

2 голосов
/ 26 мая 2019

В Python2 повторение литерала '\xb1\x90\x8b\x9a' создает строки, а не байты.

Одним из решений было бы использование bytearray .

>>> ba = bytearray(data)
>>> ''.join(chr(x ^ 0xFF) for x in ba)
'Note'

Как указывает @wovano в комментариях, это также возможно сделать без использования bytearray, например:

''.join(chr(ord(x) ^ 0xFF) for x in data) 
...