2014-02-07 35 views
1

我想讀文件,找到它的東西,結果保存到文件,但是當我要救它,它給我一個錯誤
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 19: ordinal not in range(128)的UnicodeDecodeError:保存在Python

代碼保存到文件中:
fileout.write((key + ';' + nameDict[key]+ ';'+src + alt +'\n').decode('utf-8'))

我能做些什麼來解決它?
謝謝

+2

這是Python 2嗎?你爲什麼*從UTF-8解碼爲unicode?什麼是'fileout'?你的變量有什麼? –

+0

它是python 2,變量是img標籤,用BeautifulSoup解析 – Allda

+0

因此'key','nameDict [key]','src'和'alt'都是來自BeautifulSoup的所有**值?那些值是unicode。 –

回答

0

您試圖將unicode值與字節字符串連接,然後將結果轉換爲unicode,將其寫入文件對象,最有可能只需要字節字符串。

不要混合像這樣的Unicode字節串

打開寫有io.open()自動編碼Unicode值的文件,然後處理的Unicode代碼中的:

import io 

with io.open(filename, 'w', encoding='utf8') as fileout: 
    # code gathering stuff from BeautifulSoup 

    fileout.write(u'{};{};{}{}\n'.format(key, nameDict[key], src, alt) 

你可能要檢查出csv module處理寫出分隔符分隔值。如果你走這條路,你必須明確你的編碼列:

import csv 

with open(filename, 'wb') as fileout: 
    writer = csv.writer(fileout, delimiter=';') 
    # code gathering stuff from BeautifulSoup 

    row = [key, nameDict[key], src + alt] 
    writer.writerow([c.encode('utf8') for c in row]) 

如果某些數據來自其他文件,請確保您還解碼爲Unicode第一;再次,io.open()讀取這些文件可能是最好的選擇,讓您在閱讀時將數據解碼爲Unicode值。