2016-02-03 36 views
-1

我想放棄從鏈接的圖片,並把它變成一個圖像文件:「UTF-8」編解碼器不能在位置0解碼字節0xFF。請求響應返回一個字節流。所以我使用的解碼( 'UTF-8'),然而,轉換爲Unicode流,我面臨着以下錯誤:的UnicodeDecodeError:無效的起始字節

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

請讓我知道我可以繼續進行。謝謝。

+0

流包含十六進制值'ff',這是無效的UTF8字節。所以你得到一個錯誤。也許這是別的? – RemcoGerlich

+5

爲什麼你想將其轉換爲Unicode流?將其保留爲字節流。 –

+0

哦,等等,它可能是一個字節順序標記... – RemcoGerlich

回答

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') 
3

不要使用Unicode轉換爲JPG圖片。

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') 
+0

感謝這兩種方法爲我工作。 –

相關問題