2015-08-27 3 views
2

Я использую tweepy и получаю эту ошибку при печати твитов сообщений на экране (Windows).'charmap' codec не может кодировать символы

#!/usr/bin/env python 

from tweepy import Stream 
from tweepy import OAuthHandler 
from tweepy.streaming import StreamListener 
import json 

#consumer key, consumer secret, access token, access secret. 
ckey = 'xyz' 
csecret = 'xyz' 
atoken = 'xyz' 
asecret = 'xyz' 


class Listener(StreamListener): 

    def on_data(self, data): 
     print json.loads(data)['text'] 
     return True 

    def on_error(self, status): 
     print status 


auth = OAuthHandler(ckey, csecret) 
auth.set_access_token(atoken, asecret) 

twitterStream = Stream(auth, Listener()) 
twitterStream.filter(track=['#hash1', '#hash2'], languages=['en']) 
> Traceback (most recent call last): File 
> "C:....twitterSentiment.py", 
> line 34, in <module> 
>  twitterStream.filter(track=['#hash1', '#hash2'], languages=['en']) File 
> line 430, in filter 
>  self._start(async) File "C:......streaming.py", 
> line 346, in _start 
>  self._run() File "C:.....streaming.py", 
> line 286, in _run 
>  raise exception UnicodeEncodeError: 'charmap' codec can't encode characters in position 108-111: character maps to <undefined> 

Это вызвано ОС Windows не поддерживает все символы. Есть ли обходной путь для этого?

+1

Вы можете оставить свой код здесь? pastebin –

+0

Вам нужно вставить код, на который ссылается ошибка, ошибка просто говорит нам, где искать ошибку. – PVNRT

ответ

2

Вы получаете эту ошибку, так как не может печатать unicode часть tweet.text. Кодировать его до utf-8 (юникод).

def on_data(self, data): 
    print json.loads(data)['text'].encode('utf-8') 
    return True 
0
chcp 65001 

Это предписанное решение в несколько потоков. Я использовал символ «∞», который не печатался. Я запускал код python из cmd после запуска

chcp 65001 

Он работал как шарм. Надеюсь, поможет.

p.s. Он работает только в cmd не в редакторе атомов, а через cygwin.