【问题标题】:python : unicodeEncodeError: 'charpmap' codec can't encode character '\u2026'python:unicodeEncodeError:“charpmap”编解码器无法编码字符“\u2026”
【发布时间】:2015-04-08 13:56:08
【问题描述】:

我尝试分析我从 tweeter 获得的一些推文,但如果您有任何想法,我似乎有编码问题..

import json

#Next we will read the data in into an array that we call tweets.
tweets_data_path = 'C:/Python34/TESTS/twitter_data.txt'

tweets_data = []
tweets_file = open(tweets_data_path, "r")


for line in tweets_file:
    try:
        tweet = json.loads(line)
        tweets_data.append(tweet)
    except:
        continue

print(len(tweets_data))#412 tweets
print(tweet)

我错了: 文件“C:\Python34\lib\encodings\cp850.py”,第 19 行,在编码返回 codecs.charmap_encode(input,self.errors,encoding_map)[0] unicodeEncodeError:“charpmap”编解码器无法在位置 1345 编码字符“\u2026”:字符映射到未定义

在工作中,我没有收到错误,但我有python 3.3,你觉得有什么不同吗?

-----编辑

@MarkRamson 的评论回答了我的问题

【问题讨论】:

  • 您能提供发生 UnicodeEncodeError 的行吗?你是怎么写这些推文的?你用 UTF-8 编码了吗?
  • 今晚我会看,但我从 twitter API 收到了推文,并检查了文件的编码是 UTF-8
  • 问题是您正在运行的控制台无法处理您要打印的字符: 请参阅stackoverflow.com/questions/3597480/… 以获得一些提示。
  • 就是这样!非常感谢

标签: python json


【解决方案1】:

您应该在打开文件时指定编码:

tweets_file = open(tweets_data_path, "r", encoding="utf-8-sig")

【讨论】:

  • utf-8-sig 是有根据的猜测吗? ;) 那你应该为它争辩。
  • @Jan-PhilipGehrcke:U+2026 是在推文中有意义的省略号字符。此外,UTF-8 是任何 Twitter API 最可能使用的编码。所以是的,我会说这是一个有根据的猜测......( -sig 部分只是一种预防措施 - 如果有 BOM,它会处理它,如果没有,则不会造成伤害)。
  • 好吧,相信了一半。并且对于其他读者来说很明显:数据来自随机文件 twitter_data.txt,因此我们实际上无法可靠地知道其中的数据是如何编码的。
  • 我猜问题出在print 行而不是open
  • @georg:很可能,是的。 print(tweet.encode("ascii", errors="ignore").decode("ascii")) 可能会有所帮助...(而不是“ascii”,您应该使用终端的编码)。
猜你喜欢
  • 2012-01-07
  • 2013-04-21
  • 2015-07-04
  • 1970-01-01
  • 2013-08-01
  • 2015-11-21
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多