Я читаю файл изображения, когда появляются двоичные странные символы - PullRequest
0 голосов
/ 10 июня 2019

Я читаю файл изображения в двоичном формате на python:

open('chall.png, 'rb').read()

Результат:

b'\xe0>8.~cxfein{ ;-0lek\xf7virejneinv\xe7I\x01blo7\x14"1\x07;\x03\x1bE\x19\x1c\x19\x0f\x1a\x05\x07L\x11\x10\x1e\x13I\x16\x11\x0b\nei\x16\xac\x84\xeb2\xf4O\xdcd*\x89\x1af7`e\xf7i\xd7j\xd7\x03\xe7\x15\x8c\x80\x92,$>L\x0f\xa4\xf2\x94\x98\xe9IE\x06@7\xb5\xfc |g\xe1{\xbf\x11\x93\x94\x1e\x11\x88\xaf8\x13\xcb#\x08\xbf\x1b\xdeO-\x1c\xb6M\xf6FS\xcb6\x9c\n,\x99\x90\x90\x14\xfb\xf8\x97\x1a\x94\xcb\x

(двоичный код файла:больше этого)

Подождите, что?Двоичные это много 1 и 0.Хорошо, возможно, это шестнадцатеричный (формат, который делает двоичный код более читабельным для людей)?

Нет, это тоже не шестнадцатеричные числа!Что происходит?

Чем я здесь занимаюсь?

Как я могу преобразовать его в шестнадцатеричные или что-то более читаемое, чем это?(как вы можете догадаться, я новичок в этом. Пожалуйста, будьте милы.)


РЕДАКТИРОВАТЬ:

file = open('image.png', 'rb').read()
file[0]
#output: 224
file[1]
#output: 62 

Как получается вывод первого "символа" (первогоиндекс) будет 224?Разве это не должно быть \xe0?

1 Ответ

0 голосов
/ 10 июня 2019

Когда вы читаете двоичные данные и пытаетесь их распечатать, двоичные данные по умолчанию пробуются и декодируются в utf-8.Вот почему вы видите странные персонажи.Приведенный ниже код форматируется как шестнадцатеричный перед печатью.Вы должны увидеть шестнадцатеричные данные без любых сценических символов, используя приведенный ниже код.

for i in open('image.png', 'rb').read():
    print(r'{0:#x}'.format(i), end=' ')
...