【发布时间】:2017-11-26 06:07:08
【问题描述】:
我一直在开发一个从 Twitter 帐户中提取推文的程序。它看起来像这样:
import tweepy
from tweepy import OAuthHandler
import json
import time
import sys
import builtins
consumer_key = ''
consumer_secret = ''
access_token = ''
access_secret = ''
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)
user = api.get_user('nytimes')
statuses = api.user_timeline(id = user.id, count = 200)
for status in statuses:
print("***")
print("Tweet id: " + status.id_str)
print(status.text)
print("Retweet count: " + str(status.retweet_count))
print("Favorite count: " + str(status.favorite_count))
print(status.created_at)
print("Status place: " + str(status.place))
print("Source: " + status.source)
print("Coordinates: " + str(status.coordinates))
time.sleep(1)
它工作正常......直到我收到一条带有表情符号的推文。然后我收到此错误消息:
UnicodeEncodeError:“UCS-2”编解码器无法对位置 19-19 中的字符进行编码:Tk 中不支持非 BMP 字符
做了一些研究,我发现了一些应该解决这个问题的代码:
def print_ucs2(*args, print=builtins.print, **kwds):
args2 = []
for a in args:
a = str(a)
if max(a) > '\uffff':
b = a.encode('utf-16le', 'surrogatepass')
chars = [b[i:i+2].decode('utf-16le', 'surrogatepass')
for i in range(0, len(b), 2)]
a = ''.join(chars)
args2.append(a)
print(*args2, **kwds)
builtins._print = builtins.print
builtins.print = print_ucs2
问题是,一旦我将这段代码添加到我的程序中,它只会打印表情符号。没有其他的。我没有错误消息了……但我也没有推文。
我还读到 .encode('utf-8') 可以做一些事情,但我不知道把它放在哪里,到目前为止我只收到使用它的错误消息。有什么想法吗?
谢谢,
【问题讨论】:
-
你可以参考这个答案,stackoverflow.com/a/32442684/4662041
-
嗨,谢谢,我确实看到了这个答案,但我不知道如何将它应用到我的代码中......我尝试了一些事情但没有成功,我得到一个“NameError:name 'x' 未定义”错误。
-
哦,没关系,我成功了!非常感谢!
标签: python twitter tweepy emoji python-unicode