Python 2:当您无法控制列表时,在字符串中处理unicode

时间:2014-04-24 11:05:24

标签: python python-2.7 unicode

所以我使用TwitterSearch Library。功能很简单,可以打印Twitter搜索结果。

所以这是一个麻烦。你的推文是由TwitterSearch从这个词典(或列表)传递的。无论是实际的是什么)

tweet['text']

如果你的python 2.7有一个unicode,这个python无法解决,那就是BOOM。程序错误

所以我试着让它像这样

a=unicode(tweet['text'], errors='ignore')
print a

目的是我希望将unicode转换为字符串,同时忽略过程中未解析的unicode(这是我从文档中理解的。我可能无法理解文档所以想出这段代码)

我收到了这个可爱的错误信息。

typeError: decoding Unicode is not suported

我的问题

1:为什么?这个Unicode内容不是默认python库的一部分

2:我应该怎么做才能将unicode转换为字符串,而忽略过程中未解析的unicode

PS:这是我的第一个unicode问题,这是我现在能做的最好的事情。不要杀了我。

1 个答案:

答案 0 :(得分:0)

您需要了解Unicode对象和字节字符串之间的区别。在Python 2.7中unicode类是一个Unicode对象。这些已包含Unicode标准中定义的字符。根据我对您提供的证据的理解,您的tweet['text']已经是unicode个实例。

您可以打印type(tweet['text'])

来验证这一点
>>> print type(tweet['text'])
<type 'unicode'>

现在unicode个对象是一个概念的高级表示,它在计算机内存中没有单一的已定义表示。它们非常有用,因为它们允许您使用ASCII标准范围之外的字符,这些字符仅限于基本的拉丁字母和数字。但是计算机不会记住Unicode中的字符作为其形状,而是使用标准提供的数字并将其称为代码点

另一方面,几乎所有计算机都使用字节操作。网络协议传输字节,输入和输出流传输字节。为了能够通过网络发送Unicode字符串,甚至在终端等设备上打印它,您需要使用通信双方(例如您的程序和终端)都能理解的协议。我们称之为编码。

>>> u'żółw'.encode('utf-8')
'\xc5\xbc\xc3\xb3\xc5\x82w'
>>> print type(u'żółw'.encode('utf-8'))
<type 'str'>

根据您选择的编码,有许多编码和单个unicode对象通常可以编码为许多不同的字节字符串。要选择一个正确的,需要了解您想要使用结果字符串的上下文。如果您的终端理解UTF-8,则所有unicode对象在发送到输出流之前需要编码为UTF-8 。如果它只能理解ASCII,那么你可能需要删除一些字符。

>>> print u'żółw'.encode('utf-8')
żółw

因此,如果Python的默认输出编码不正确或无法处理您尝试打印的所有字符,则可以始终手动编码对象并输出结果str。但在此之前,请直接阅读您问题中与评论中链接的所有文件。