鱼C论坛

 找回密码
 立即注册
查看: 500|回复: 6

[已解决]问一下二进制图片转换并保存的问题

[复制链接]
发表于 2023-4-8 10:26:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
通过请求打印结果后出错
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呢
最佳答案
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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-8 10:29:34 | 显示全部楼层
您可以使用Python中的内置库 open 和 with 语句来写入文件。例如:
with open("image.jpg", "wb") as f:
    f.write(binary_data)

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

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

最后,您需要确保二进制图像数据是有效的,因为有时请求的数据可能是损坏的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 图像。
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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',这样才是按二进制格式来打开(创建)文件,这才是适合存取图片文件数据唯一正确的方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

其实你的方法和楼上的一样,但我保存的jpg什么也没有显示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-29 11:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表