对Python很新,并从网上获取数据,所以就在这里。
我能够从NYT api中提取数据并将JSON输出解析为CSV文件。但是,根据我的搜索,当我尝试将行写入CSV时,可能会出现以下错误。
UnicodeEncodeError:'charmap'编解码器无法对位置20-21中的字符进行编码:字符映射到
我想要解析为CSV的URL has the data。 (我取消选择“打印漂亮的结果”)
我很确定错误发生在标题附近:“斯皮策.......”
我试图搜索网络,但我似乎无法得到答案。我不知道很多编码,但我猜测我从JSON记录中检索的数据是以某种方式编码的。
非常感谢您提供的任何帮助。
非常感谢,
布洛克
答案 0 :(得分:2)
您需要检查HTTP标头,以查看返回结果时使用的char编码。我敢打赌,所有内容都编码为utf-8,当您尝试写入CSV时,您隐式将输出编码为ascii。
他们正在使用的不在ascii字符集中。您可以捕获UnicodeError异常。
提前解码为unicode(data.decode('utf-8','ignore'))
在内部使用unicode。
编码延迟 - 输出期间 - data.encode('ascii','忽略'))
您可以将CSV编写器设置为在写入时使用utf-8编码。
注意:在盲目使用utf-8之前,你应该真正看到他们给你的编码。
答案 1 :(得分:0)
每段文本数据都经过编码。没有任何代码很难说出问题是什么,所以我现在唯一的建议是:在解析之前尝试解码响应......
resp = do_request()
## look on the nyt site if they mention the encoding used and use it instead.
decoded = resp.decode('utf-8')
parsed = parse( decoded )
答案 2 :(得分:0)
似乎正在尝试解码在使用斜杠时使用的'/'。使用字符串函数可以避免这种情况。
str('http:\/\/www.nytimes.com\/2010\/02\/17\/business\/global\/17barclays.html')
'http:\\/\\/www.nytimes.com\\/2010\\/02\\/17\\/business\\/global\\/17barclays.html'
从那里你可以使用替换。
str('http:\/\/www.nytimes.com\/2010\/02\/17\/business\/global\/17barclays.html').replace('\\', "")
答案 3 :(得分:0)
小心nytimes API - 它不会为您提供完整的正文。