我正在尝试使用python 2.7.12从json文件读取twitter数据。
我使用的代码是这样的:
import json
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
def get_tweets_from_file(file_name):
tweets = []
with open(file_name, 'rw') as twitter_file:
for line in twitter_file:
if line != '\r\n':
line = line.encode('ascii', 'ignore')
tweet = json.loads(line)
if u'info' not in tweet.keys():
tweets.append(tweet)
return tweets
结果我得到:
Traceback (most recent call last):
File "twitter_project.py", line 100, in <module>
main()
File "twitter_project.py", line 95, in main
tweets = get_tweets_from_dir(src_dir, dest_dir)
File "twitter_project.py", line 59, in get_tweets_from_dir
new_tweets = get_tweets_from_file(file_name)
File "twitter_project.py", line 71, in get_tweets_from_file
line = line.encode('ascii', 'ignore')
UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 3131: invalid start byte
我仔细研究了类似问题的所有答案,并想出了这段代码,它在上一次有效。我不知道为什么现在不起作用…我将不胜感激!
这对您没有帮助sys.setdefaultencoding('utf-8')
,这会使事情进一步混乱-
这是一个讨厌的黑客,您需要将其从代码中删除。
错误正在发生,因为line
是一个字符串,您正在调用encode()
。encode()
仅当字符串是Unicode时才有意义,因此Python会尝试首先使用默认编码(在您的情况下为UTF-8
,但应为)将Unicode转换为Unicode
ASCII
。无论哪种方式,0x80
无效的ASCII或UTF-8都将失败。
0x80
在某些字符集中有效。在windows-1252
/ cp1252
是€
。
这里的窍门是从头到尾理解代码的数据编码。此刻,您还有太多机会。Unicode字符串类型是Python的一种便捷功能,它使您可以解码已编码的字符串,而无需进行编码,直到需要写入或传输数据为止。
使用该io
模块以文本模式打开文件并对其进行解码-
不再.decode()
!您需要确保传入数据的编码是一致的。您可以在外部对其重新编码,也可以在脚本中更改编码。这是我将编码设置为windows-1252
。
with io.open(file_name, 'r', encoding='windows-1252') as twitter_file:
for line in twitter_file:
# line is now a <type 'unicode'>
tweet = json.loads(line)
该io
模块还提供通用换行符。这意味着将\r\n
被检测为换行符,因此您不必注意它们。
问题内容: 我正在使用脚本,但在执行此操作时在服务器日志中发现了此错误, ``这里 函数返回。 张贴这个问题之前我已经提到这个 问题,操作系统,所以的。 更新 下一行损害了JSON编码器, 我有一个临时解决方案 但是我不确定这样做是否正确。 问题答案: 该错误是因为字典中存在一些非ASCII字符,并且无法对其进行编码/解码。避免此错误的一种简单方法是使用以下函数对此类字符串进行编码(如果字符串为非
问题内容: 我正在使用Python-2.6 CGI脚本,但是在执行服务器日志时发现此错误, 这里 函数返回。 张贴这个问题之前我已经提到这个问题,操作系统,所以的。 更新 下一行损害了JSON编码器, 我有一个临时解决方案 但是我不确定这样做是否正确。 问题答案: 该错误是因为字典中存在一些非ASCII字符,并且无法对其进行编码/解码。避免此错误的一种简单方法是使用encode()如下函数对此类字
我正在使用脚本,但在执行时在服务器日志中发现此错误, 在这里 函数返回。 在发布此问题之前,我已将此问题提交给了SO。 下面这行代码伤害了JSON编码器, 我找到了一个临时的解决办法 但是我不确定这样做是否正确。
问题内容: 我正在尝试编写一个脚本,该脚本通过创建随机utf-8编码的字符串,然后将其解码为unicode来生成随机unicode。对于单个字节,它工作正常,但是对于两个字节,它将失败。 例如,如果我在python shell中运行以下命令: 根据utf-8方案https://en.wikipedia.org/wiki/UTF-8#Description,字节序列应以开头和开头都有效。 这是我的p
问题内容: 我是Python的新手,正在尝试使用以下脚本读取csv文件。 但是,出现错误“ UnicodeDecodeError:’utf-8’编解码器无法解码位置35处的字节0x96:无效的起始字节”,请在此帮助我了解问题,我在脚本中使用编码认为可以解决错误。 问题答案: 发生这种情况是因为您选择了错误的编码。 由于您使用的是Windows计算机,因此只需更换 与 应该解决问题。
问题内容: unicode是如何在python2上工作的?我只是不明白。 在这里,我从服务器下载数据并解析为JSON。 谢谢!! 编辑:以下字符串导致错误:。应该解码为(abhören) 问题答案: 您尝试解析为JSON的字符串未使用UTF-8编码。它很可能是在ISO-8859-1中编码的。请尝试以下操作: 它将处理JSON消息中可能出现的所有变音符号。 您应该阅读Joel Spolsky的《每个