UnicodeDecodeError:' utf-8'编解码器不能解码位置0中的字节0xff:无效的起始字节

时间:2016-02-03 18:21:25

标签: python utf-8

我正在尝试从链接中删除图片并将其放入图像文件中。请求响应返回一个字节流。所以我使用decode(' utf-8')转换为unicode流但是,我遇到以下错误:

print(info.decode((' utf-8')))

UnicodeDecodeError:' utf-8'编解码器不能解码位置0中的字节0xff:无效的起始字节

    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()

请告诉我如何处理。感谢。

2 个答案:

答案 0 :(得分:3)

不要对JPG图像使用Unicode转换。

Unicode用于文本。你下载的不是文本,而是其他东西。

试试这个:

from urllib import request
img = request.urlopen('http://www.py4inf.com/cover.jpg')
fhand = open('cover.jpg', 'wb')
size = 0
while True:
    info = img.read(100000)
    if len(info) < 1 : break
    size = size + len(info)
    fhand.write(info)

print (size,'characters copied.')

或者更简单:

from urllib import request
request.urlretrieve('http://www.py4inf.com/cover.jpg', 'cover.jpg')

答案 1 :(得分:2)

该文件应以二进制模式打开,然后您可以将流字节复制为字节。由于shutil已经有一个方便的帮助工具,你可以

import shutil
import os
from urllib import request

img = request.urlopen('http://www.py4inf.com/cover.jpg')
with open('cover.jpg', 'wb') as fhand:
    shutil.copyfileobj(img, fhand)
print(os.stat('cover.jpg').st_size, 'characters copied')