2014-02-07 8 views
3

Я получаю следующее сообщение об ошибке при попытке записи в CSV, используя JSON:UnicodeEncodeError при записи в CSV из JSON

Traceback (most recent call last): 
File "twitter_search_csv.py", line 25, in <module> 
status['retweet_count'], 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 139: ordinal not in range(128) 

Вот код, я работаю с:

import requests 
import urllib2 
from requests_oauthlib import OAuth1 
import csv 

auth = OAuth1('', '', '', '') 
url = 'https://api.twitter.com/1.1/search/tweets.json?q=%23OpeningCeremony' 

response = requests.get(url, auth=auth) 

data = response.json()['statuses'] 

with open('olympic_search.csv', 'wb') as csvfile: 
    f = csv.writer(csvfile) 
    for status in data: 
     f.writerow([ 
      status['id'], 
      status['text'], 
      status['created_at'], 
      status['coordinates'], 
      status['user']['id_str'], 
      status['retweet_count'], 
     ]) 
+0

Док (http://docs.python.org/2/library/csv.html), имеет большое внимание дело с этой ситуацией. –

ответ

6

Явно закодировать поле. В противном случае Python попытается закодировать его с помощью ascii-кодирования.

>>> print u'\u2026'.encode('ascii') 

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    print u'\u2026'.encode('ascii') 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 0: ordinal not in range(128) 
>>> print u'\u2026'.encode('utf-8') 
… 

f.writerow([ 
    status['id'], 
    status['text'].encode('utf-8'), # <---- 
    status['created_at'], 
    status['coordinates'], 
    status['user']['id_str'], 
    status['retweet_count'], 
]) 
+0

@ Robᵩ, хорошая точка. Благодарю. – falsetru

+0

Только теперь, я получаю AttributeError: 'Traceback (самый последний вызов последнего): Файл "twitter_search_csv.py", строки 22, в статус [ 'retweet_count'] кодировать ('UTF-8'), AttributeError. : 'int' объект не имеет атрибута 'encode'' –

+0

@PatrickBeeson, я обновил ответ. Проверьте это. – falsetru

Смежные вопросы