2015-05-27 3 views
1

Я пытаюсь очистить через Twitter-биографию с помощью API Twitter с Python.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

я получаю: "TypeError: 'игнорировать' является недопустимым аргументом ключевое слово для этой функции" – auto

+0

Попробуйте '.encode ('UTF -8 ', errors =' ignore ') '@auto – ZdaR

+0

" newFile.writerow (info) UnicodeEncodeError: кодек ascii не может кодировать символы в позиции 0-4: порядковый номер не в диапазоне (128) " Я добавляю их где-то еще? Я добавляю их только после био описания, имени пользователя и имени. Ничто другое не имеет смысла. – auto

ответ

1

Основная проблема состоит в том, что модуль CSV в Python не 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()