0

我提前道歉,因为我不知道如何问这个!好的,所以我正在尝试在 Python 中使用 twitter API。这是给我问题的代码片段:

trends = twitter.Api.GetTrendsCurrent(api)
print str(trends)

这将返回:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)

当我尝试 .encode 时,解释器告诉我我无法对 Trend 对象进行编码。我该如何解决这个问题?

4

1 回答 1

0

简单的回答:

使用repr,不使用str。它应该始终、始终有效(除非 API 本身已损坏并且这是引发错误的地方)。

长答案:

默认情况下,当您在 Python 2 中将 Unicode 字符串转换为字节 str(反之亦然)时,它将ascii默认使用编码进行转换过程。这在大多数情况下都有效,但并非总是如此。因此,像这样令人讨厌的边缘情况是一种痛苦。Python 3 向后兼容性中断的一个重要原因是改变了这种行为。

用于latin1测试。它可能不是正确的编码,但它总是(总是,总是,总是)工作,并给你一个正确调试的起点,这样你至少可以打印一些东西。

trends = twitter.Api.GetTrendsCurrent(api)
print type(trends)
print unicode(trends)
print unicode(trends).encode('latin1')

或者,更好的是,当编码强制它忽略或替换错误时:

trends = twitter.Api.GetTrendsCurrent(api)
print type(trends)
print unicode(trends)
print unicode(trends).encode('utf8', 'xmlcharrefreplace')

很有可能,因为您正在处理基于 Web 的 API,所以无论如何您都在处理 UTF-8 数据;它几乎是网络上所有的默认编码。

于 2015-10-17T03:31:26.883 回答