2015-06-15 4 views
0

Я использую Tweepy для аутентификации, и я пытаюсь распечатать текст, но я не могу распечатать текст. Я получаю UnicodeEncodeError. Я попробовал какой-то метод, но я не смог его решить.UnicodeEncodeError Python 2.7

# -*- coding: utf-8 -*- 

import tweepy 

consumer_key = "" 
consumer_secret = "" 
access_token = '' 
access_token_secret = '' 

auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 

api = tweepy.API(auth) 

public_tweets = api.home_timeline() 
for tweet in public_tweets: 
    print tweet.text.decode("utf-8")+'\n' 

Ошибка:

(venv) C:\Users\e2sn7cy\Documents\GitHub\Tweepy>python tweepyoauth.py 
Throwback to my favourite! Miss this cutie :) #AdityaRoyKapur https://t.co/sxm8g1qhEb/n 
Cristiano Ronaldo: 3 hat-tricks in his last 3 matches. 

Lionel Messi: 3 trophies in his last 3 matches. http://t.co/For1It4QxF/n 
How to Bring the Outdoors in With Indoor Gardens http://t.co/efQjwcszDo http://t.co/1NLxSzHxlI/n 
Traceback (most recent call last): 
    File "tweepyoauth.py", line 17, in <module> 
    print tweet.text.decode("utf-8")+'/n' 
    File "C:\myPython\venv\lib\encodings\utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True) 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128) 
+0

Почему вы должны ' + '/ n''? –

+0

, что wasn, t ошибка, но спасибо, я исправил это, но все равно получаю ту же ошибку –

+0

Я пришел сюда, и моя проблема была решена, заменив «str (i) +« ... »+ str (x). encode ("utf-8") 'by unicode (i) + u" ... "+ unicode (x) .encode (" utf-8 ")', то есть сделать все unicode перед конкатенацией и кодировкой. –

ответ

1

Эта линия print tweet.text.decode("utf-8")+'/n' является причиной.

Вы декодируете tweet.text как utf-8 в строку юникода. Хорошо, пока здесь.

Но вы попытаетесь объединить его с необработанной строкой '/ n' (BTW, я думаю, вы действительно хотели \n), и python попытается преобразовать строку unicode в строку ascii raw, дающую ошибку.

Вы должны сцепить с юникода строкой, чтобы получить строку Юникода без преобразования:

print tweet.text.decode("utf-8") + u'\n' 

Если этого недостаточно, то это может быть потому, что среда не может непосредственно печатать Юникод строки. Тогда вы должны explictely кодировать его в родной кодировке вашей системы:

print (tweet.text.decode("utf-8") + u'\n').encode('cp850') 

[здесь заменить «cp850» (моего набора символов) с кодировкой на системы]

+0

Или он может просто избавиться от этой строки, так как печать закончит новую строку. –

+0

@BurhanKhalid: Я предположил, что он знал, почему он хотел добавить новую строку ... –

+0

'Traceback (последний последний звонок): Файл" tweepyoauth.py ", строка 17, в print tweet.text.decode (" utf -8 ") + u '\ n' Файл« C: \ myPython \ venv \ lib \ encodings \ utf_8.py », строка 16, в декоде return codecs.utf_8_decode (вход, ошибки, True) UnicodeEncodeError: ' ascii 'не может кодировать символ u' \ u2026 'в позиции 139: порядковый номер не в ra nge (128) ' –

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