python - 将 ASCII 输出转换为 UTF-8

标签 python json csv utf-8

我非常接近拥有一个从纽约时报 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/

相关文章:

python - 不确定如何将字典/列表写入文件 Python3

python - 如何使用 Python 检查超大数据集中的重复图片?

javascript - 无法从 Hacker News API 调用 JSON 数据

Java 数据结构,用于在运行时基于大数据集提供随机 <String><Float> 对

Python 连接和堆叠多个矩阵

python - URL 中的 Django Rest 所需参数

java - JSON 响应以文本形式返回

.net - JSON.NET 教程

python - 将字符串列表写入 csv 文件时获取逗号分隔的费用

arrays - 在 bash 脚本中遍历 csv 文件中的数组的问题