python – 解析推文中的新手错误json UnicodeEncodeError:’cha
我正在尝试按照数据科学课程的介绍.但是我试图解析来自twitter的json响应时遇到了问题
我试图从以下格式的json中检索文本. {u'delete': {u'status': {u'user_id_str': u'702327198',u'user_id': 702327198,u'id': 332772178690981889L,u'id_str': u'332772178690981889'}}},{u'delete': {u'status': {u'user_id_str': u'864736118',u'user_id': 864736118,u'id': 332770710667792384L,u'id_str': u'332770710667792384'}}},{u'contributors': None,u'truncated': False,**u'text'**: u'RT @afgansyah_reza: Lagi ngantri. Ada ibu2 & temennya. "Ih dia mukanya mirip banget sama Afgan.",trus ngedeketin gw,"Tuh kan.. Mirip bangu2026',u'in_reply_to_status_id': None,u'id': 332772350640668672L,u'favorite_count': 0,....... ] 这是我正在使用的代码: def hw(): data = [] count=0 with open('output.txt') as f: for line in f: encoded_string = line.strip().encode('utf-8') data.append(json.loads(encoded_string)) print data# generates the input to next block for listval in data:#individual block if "text" in listval: print listval["text"] else: continue 但是,当我运行它时,我得到以下输出和错误 RT @afgansyah_reza: Lagi ngantri. Ada ibu2 & temennya. "Ih dia mukanya mirip banget sama Afgan.","Tuh kan.. Mirip bang… RT @Dimaz_CSIX: Kolor pakek pita #laguharlemshake Traceback (most recent call last): File "F:ProgrammingPointworkspace-newPyTesttweet_sentiment.py",line 41,in <module> main() File "F:ProgrammingPointworkspace-newPyTesttweet_sentiment.py",line 36,in main hw() File "F:ProgrammingPointworkspace-newPyTesttweet_sentiment.py",line 23,in hw print listval["text"] File "C:Python27libencodingscp1252.py",line 12,in encode return codecs.charmap_encode(input,errors,encoding_table) UnicodeEncodeError: 'charmap' codec can't encode characters in position 13-63: character maps to <undefined> 我是Python的新来者,任何帮助将不胜感激. 解决方法
您的所有转换等都是正确的.问题只是试图将其打印到stdout.
(通常情况下,你会遇到重音,东亚等字符的问题;这里似乎是…省略号字符,但它也是同样的问题.) 如果您在终端窗口(DOS提示符等)中运行它,则只能打印终端字符集可以处理的字符.因此,例如,在为“cp1252”(与您的)配置的Windows框中,您无法打印非Latin-1 /非Latin-15 /非ANSI字符. (在早期版本的Python中,有一个额外的问题,Python可能无法正确猜测终端的最佳编码,并坚持使用’ascii’,即使它可以处理utf-8,或者至少是cp1252.你可以找出Python使用sys.stdout.encoding猜测stdout的编码.如果这是错误的,你可以明确地修复它.) 但是如果你的终端不是UTF-8(并且它不是),你需要告诉它如何处理它无法代表的字符.您可以在打印时使用显式错误参数对字符串进行编码,如下所示: print u.encode(sys.stdout.encoding,'replace') ……或其他各种各样的事情.但是,如果要在一个位置修复此问题,则需要更改打印的默认错误处理程序. 不幸的是,在Python 2.7中,虽然sys.stdout确实有一个errors属性,但它是只读的.解决这个问题的一种方法是用原始sys.stdout周围的包装器(或其底层文件句柄或其他等效的东西)替换它.例如: >>> u = 'RT @afgansyah_reza: Lagi ngantri. Ada ibu2 & temennya. "Ih dia mukanya mirip banget sama Afgan.","Tuh kan.. Mirip bangxe2x80xa6'.decode('utf8') >>> print u UnicodeEncodeError: 'charmap' codec can't encode characters in position 13-63: character maps to <undefined> >>> sys.stdout = codecs.getwriter(sys.stdout.encoding)(sys.stdout,errors='replace') >>> print u RT @afgansyah_reza: Lagi ngantri. Ada ibu2 & temennya. "Ih dia mukanya mirip banget sama Afgan.","Tuh kan.. Mirip bang? 有关更多信息,请阅读2.x Unicode HOWTO和 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |