将ASCII输出转换为UTF-8

时间:2012-10-05 03:49:49

标签: python json csv utf-8

我真的很接近一个从纽约时报API获取JSON的脚本,然后将其转换为CSV。但是,偶尔我会收到此错误:

  

UnicodeEncodeError:'ascii'编解码器无法对字符u'\ u201c'进行编码   第21位:序数不在范围内(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)

2 个答案:

答案 0 :(得分:1)

一些事情......

  • 我对NewYork Times API一无所知,但我猜你可能不应该发布带​​有“api-key”的代码片段。只是猜测这一点(我之前从未使用过这个API)

  • 如果你看,API会告诉你编码。您将在标题中找到以下内容:

    Content-Type=application/json; charset=UTF-8 
    
  • Google搜索“python和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)

答案 1 :(得分:0)

用unicode()替换对str()的第二次和第三次调用。

for comment in parsed_json['results']['comments']:
    row = []
    row.append(str(comment['commentSequence']))
    row.append(unicode(comment['commentBody']))
    row.append(unicode(comment['commentTitle']))
    row.append(str(comment['approveDate']))
    writer.writerow(row)