简单的回答:
使用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 数据;它几乎是网络上所有的默认编码。