【发布时间】:2016-05-13 02:25:37
【问题描述】:
我正在尝试从链接中删除图片并将其放入图像文件中。请求响应正在返回一个字节流。所以我使用 decode('utf-8') 转换为 unicode 流,但是,我面临以下错误:
打印(info.decode(('utf-8')))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
from urllib import request
img = request.urlopen('http://www.py4inf.com/cover.jpg')
fhand = open('cover.jpg', 'w')
size = 0
while True:
info = img.read(100000)
if len(info) < 1 : break
size = size + len(info)
print (info.decode(('utf-8')))
fhand.write(info.decode(('utf-8')))
print (size,'characters copied.')
fhand.close()
请让我知道如何继续。谢谢。
【问题讨论】:
-
流包含一个十六进制值
ff的字节,它不是有效的UTF8。所以你得到一个错误。也许是别的什么? -
您为什么要尝试将其转换为 Unicode 流?将其保留为字节流。
-
哦等等,可能是字节序标记...
-
它是二进制 jpg 图像,而不是字符串。您不应该尝试将其解码为文本。它不喜欢你会得到图像或其他东西的描述。顺便说一句,用二进制打开目标
open('cover.jpg', 'wb')。 -
它是一个二进制流,应该不经转换直接写入文件。
decode用于文本数据,需要从文本的流表示(网页上常见的utf-8)转换为python使用的内部表示。如果你打开目标"wb",你可以直接写入二进制数据而不会出现TypeError。