【问题标题】:I read image file as binary strange symbols appear我在出现二进制奇怪符号时读取图像文件
【发布时间】:2019-10-24 15:44:51
【问题描述】:

我在 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吗?

【问题讨论】:

    标签: python binary hex binary-data


    【解决方案1】:

    当你读取一个二进制数据并尝试打印它时,二进制数据默认被尝试解码为utf-8。这就是为什么你会看到奇怪的字符。以下代码在打印前格式化为十六进制。使用下面的代码,您应该会看到没有任何阶段字符的十六进制数据。

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

    【讨论】:

    • 我知道十六进制是什么。 HEX=十六进制吗?
    • 是否可以避免让python默认尝试将二进制文件转换为utf-8?我的意思是,我不能将它作为二进制“读取”吗?
    • 你的意思是你想要一和零?您能否详细说明您的确切期望。在主要问题中编辑它。如果可能,还请提供您想要二进制文件的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多