2015-05-27 73 views
1

我想通過使用Twitter的API與Python的Twitter bios。Python/Tweepy UnicodeEncodeError

但是我得到這個錯誤:

newFile.writerow(info)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

我認爲,當有人在他們的生物或網名,但是,沒有了以下解決方案的表情符號出現這種情況似乎停止錯誤:

  • .encode( 'unicode_escape')
  • .encode( 'UTF8')
  • .encode( 'UTF8')

下面是當前的代碼

for follower in followers.items(): 
    info=[] 
    name =follower.name.encode('unicode_escape') 
    screen_name = follower.screen_name.encode('unicode_escape') 

    userId = userId + 1 

    #add values to array 
    values.append(userId) 
    values.append(name) 
    values.append(screen_name) 

    csvFile = open('followers.csv','a') 
    newFile =csv.writer(csvFile) #imported csv 
    #add list of headers as a new row 
    newFile.writerow(info) 
    #close file 
    csvFile.close() 
+0

我得到: 「類型錯誤: '忽略' 是此功能的無效關鍵字參數」 – auto

+0

嘗試'.encode(「UTF -8',錯誤='忽略')'@auto – ZdaR

+0

「newFile.writerow(info) UnicodeEncodeError:'ascii'編解碼器不能編碼位置0-4的字符:序號不在範圍內(128)」 應該我將這些添加到其他地方?我只是在生物描述,用戶名和姓名後添加它們。沒有別的東西似乎有意義。 – auto

回答

1

的一個主要問題是,Python的CSV模塊是不是Unicode安全 - 請參閱警告在https://docs.python.org/2/library/csv.html

周圍的工作,因爲你發現被編碼所有值UTF-8第一:

name = follower.name.encode('UTF-8') 
screen_name = follower.screen_name.encode('UTF-8') 

你現在打的問題是Python的仍試圖按自己的價值觀編碼爲ASCII。這是由於您打開文件進行寫入的方式。添加b二進制寫作:

csvFile = open('followers.csv','ab') 

在其完整的形式:

for follower in followers.items(): 
info=[] 
name = follower.name.encode('UTF-8') 
screen_name = follower.screen_name.encode('UTF-8') 

userId = userId + 1 

#add values to array 
values.append(userId) 
values.append(name) 
values.append(screen_name) 

csvFile = open('followers.csv','ab') 
newFile =csv.writer(csvFile) #imported csv 
#add list of headers as a new row 
newFile.writerow(info) 
#close file 
csvFile.close()