我读取图像文件时出现二进制奇怪的符号

时间:2019-06-10 08:38:05

标签: python binary hex binary-data

我在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 :(得分:0)

读取二进制数据并尝试打印时,默认情况下会尝试将二进制数据解码为class Item(models.Model, AdminVideoMixin): title = models.TextField(max_length=5000) .... class Set(Item): items = models.ManyToManyField(Item, related_name='in_sets', through='SetMeta', max_length=5000,) def get_absolute_url(self): return reverse('curate:set_detail',kwargs={'slug':self.slug}) def get_queryset(self): return self.items.all().order_by('-itemOrder__order') def __str__(self): return self.title def auto_increment_order(self): print('IS THIS WORKING') <----never prints. length_of_set = len(self.set.items.all()) return length_of_set class SetMeta(models.Model): item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='itemOrder', max_length=5000) set = models.ForeignKey(Set, on_delete=models.CASCADE, related_name='SetOrder', max_length=5000) order = models.IntegerField(default=0, null=True,) def up(self): self.order += 1 self.save() print(self.order) def down(self): self.order -= 1 self.save() print(self.order) def save(self, *args, **kwargs): if self.order == 0: self.order = auto_increment_order(self) super(SetMeta, self).save(*args, **kwargs) print(f"{self.item.title} order is {self.order}") < ---- this never fires. 。那就是为什么你看到奇怪的人物。下面的代码在打印之前格式化为十六进制。使用以下代码,您应该会看到十六进制数据,其中没有任何阶段字符。

utf-8