我非常接近拥有一个从纽约时报 API 获取 JSON,然后将其转换为 CSV 的脚本。但是,有时我会收到此错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 21: ordinal not in range(128)
我认为如果我将输出转换为 UTF-8,我可以避免这一切,但我不确定如何做到这一点。这是我的 python 脚本:
import urllib2
import json
import csv
outfile_path='/NYTComments.csv'
writer = csv.writer(open(outfile_path, 'w'))
url = urllib2.Request('http://api.nytimes.com/svc/community/v2/comments/recent?api-key=ea7aac6c5d0723d7f1e06c8035d27305:5:66594855')
parsed_json = json.load(urllib2.urlopen(url))
print parsed_json
for comment in parsed_json['results']['comments']:
row = []
row.append(str(comment['commentSequence']))
row.append(str(comment['commentBody']))
row.append(str(comment['commentTitle']))
row.append(str(comment['approveDate']))
writer.writerow(row)
最佳答案
一些事情......
我对 NewYork Times API 一无所知,但我猜您可能不应该发布带有“api-key”的代码片段。只是对这一点的猜测(我以前从未使用过这个 API)
如果您仔细观察,API 会告诉您编码。您将在标题中得到以下内容:
Content-Type=application/json; charset=UTF-8
谷歌搜索“python and UnicodeEncodeError”会给你很多帮助。但在这里,看来你的问题可能是在评论中调用“str”。在这种情况下,它将使用“ascii”编解码器。如果有一个字符高于 128,则繁荣。您会收到所看到的错误。 Here是一篇关于该主题的非常好的博客文章。它可能会帮助您阅读它。
编辑:这个解决方案对我有用:
for comment in parsed_json['results']['comments']:
row = []
row.append(str(comment['commentSequence']))
row.append(comment['commentBody'].encode('UTF-8', 'replace'))
row.append(comment['commentTitle'].encode('UTF-8', 'replace'))
row.append(str(comment['approveDate']))
writer.writerow(row)
关于python - 将 ASCII 输出转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12739209/