cdzjf 发表于 2023-4-8 10:26:28

问一下二进制图片转换并保存的问题

通过请求打印结果后出错
UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd' in position 0: illegal multibyte sequence
然后将对其进行utf-8编码再打印结果是
b'\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\x00\x10JFIF\x00\x01\x02\x00\x00\x01\x00\x01\x00\x00\xef\xbf\xbd\xef\xbf\xbd\x00C\x00\x08\x06\x06\x07\x06\x05\

想知道上面这一串二进制开头的这后面都是这样的,我怎么才能转换后保存到本地jpg呢

isdkz 发表于 2023-4-8 10:29:34

您可以使用Python中的内置库 open 和 with 语句来写入文件。例如:

with open("image.jpg", "wb") as f:
    f.write(binary_data)

其中 binary_data 是您请求获得的二进制图像数据。

请注意,在写入文件时,您需要使用二进制模式,因此在打开文件时,您需要使用 "wb" 模式。

最后,您需要确保二进制图像数据是有效的,因为有时请求的数据可能是损坏的。

sfqxx 发表于 2023-4-8 10:42:47

本帖最后由 sfqxx 于 2023-4-8 10:45 编辑

这看起来像是一个JPEG文件的字节串,但是出现了一些编码问题。首先,`UnicodeEncodeError` 表示在将一个非 ASCII 字符串输出到控制台时发生了错误,因为默认情况下 Python 使用 `gbk` 编码输出到控制台,但是这个字符串包含了一些无法用 `gbk` 编码表示的字符,因此抛出了这个异常。

接着,你尝试将字节串转换成 Unicode 字符串,使用 `utf-8` 编码,但是由于这并不是真正的文本数据,而是二进制 JPEG 数据,因此即使你对它进行编码,你也只能得到一些乱码字符和 ASCII 控制字符,如 `\x00` 和 `\n`。

如果你想保存这些字节到本地作为 JPEG 文件,你可以使用以下代码:


with open('image.jpg', 'wb') as f:
    f.write(b'\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\x00\x10JFIF\x00\x01\x02\x00\x00\x01\x00\x01\x00\x00\xef\xbf\xbd\xef\xbf\xbd\x00C\x00\x08\x06\x06\x07\x06\x05\\')


这会创建一个名为 `image.jpg` 的二进制文件,并将字节串写入其中。你应该能够打开这个文件,并查看 JPEG 图像。
有用请设置最佳答案

jackz007 发表于 2023-4-8 11:14:20

本帖最后由 jackz007 于 2023-4-8 11:17 编辑

       文字信息、图片数据实际上都是以字节串的形式存在于电脑内存中,当我们保存这些数据到磁盘文件的时候,有2种选择,一种是按文本数据来进行保存,需要先把字节数据解码成为字符串(系统自动帮助完成),然后,再保存为文本文件,这种情况要求字节数据必须是由字符串编码而成,否则,注定要失败;另一种是依原样按二进制字节码直接进行保存。open(file , mode , encoding) 的参数中,如果 mode 参数是 'r'、'w'、'a' 等,那么,就是按第一种选择(文本文件)打开(创建)文件,如果用来存取图片文件那是注定要失败的,所以,应该把 mode 参数相应地修改为 'rb'、'wb'、'ab',这样才是按二进制格式来打开(创建)文件,这才是适合存取图片文件数据唯一正确的方法。

cdzjf 发表于 2023-4-8 11:31:05

本帖最后由 cdzjf 于 2023-4-8 11:35 编辑

isdkz 发表于 2023-4-8 10:29
您可以使用Python中的内置库 open 和 with 语句来写入文件。例如:




好像还是不行,保存的文件打开什么也没有

response=requests.get(url=url, headers=headers)
img=response.text.encode(encoding='utf-8')
with open("image.jpg", "wb") as f:
      f.write(img)

cdzjf 发表于 2023-4-8 11:31:48

sfqxx 发表于 2023-4-8 10:42
这看起来像是一个JPEG文件的字节串,但是出现了一些编码问题。首先,`UnicodeEncodeError` 表示在将一个非...

其实你的方法和楼上的一样,但我保存的jpg什么也没有显示

isdkz 发表于 2023-4-8 11:32:49

cdzjf 发表于 2023-4-8 11:31
好像还是不行,保存的文件打开什么也没有

response=requests.get(url=url_code, headers=headers_main ...

response=requests.get(url=url_code, headers=headers_main)
img=response.content
with open("image.jpg", "wb") as f:
      f.write(img)
页: [1]
查看完整版本: 问一下二进制图片转换并保存的问题