2016-04-12 26 views
-1

NPR API'sından bilgi almak için kod yazıyorum ve kodlama hatasına girmeye devam ediyorum. .encode('utf-8')'u denedim ama nereye koyacağımı bulamıyorum ve bir hata alıyorum.Python'da 'ascii' kodlama hatası

import json 
import requests 

def pretty(obj): 
    return json.dumps(obj, sort_keys = True) 

def NPR(
    baseurl = 'http://api.npr.org/query?', 
    apiKey = 'MDIzNjY4Mzk5MDE0NjAzMTcwMzNjNGZjOA000', 
    id = '1126', 
    output = 'json', 
    numResults = '50', 
    feilds = 'text', 
    dateType = 'story', 
    cache_fname="cached_data.txt", 
    extra_params={}): 

    d = {} 
    d['id'] = id 
    d['feilds'] = feilds 
    d['dateType'] = dateType 
    d['output'] = output 
    d['numResults'] = numResults 
    d['apiKey'] = apiKey 
    resp = requests.get(baseurl, params = d) 
    print resp.url 
    print "caching data" 
    f = open(cache_fname, 'w') 
    f.write(resp.text) 
    f.close() 
    return resp.text 

NPR(cache_fname="NPR_Africa.txt") 

alıyorum hatadır:

Bu

benim kodudur hattında

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2014' in position 10636: ordinal not in range(128) 

f.write(resp.text)

+1

[UnicodeEncodeError: 'ascii' codec'in olası kopyası, 47. konumdaki u '\ u2019' karakterini kodlayamaz: ordinal aralıkta (128) değil (http://stackoverflow.com/questions/26641027/unicodeencodeerror- ascii-codec-cant-kodlama-karakter-u-u2019-in-position-4) – usr2564301

cevap

1

utf-8 kodlaması ile metin dosyası olarak Dosya aç:

f = open(cache_fname, 'wt', encoding='utf-8') 

Ama bu sadece Python 3.

Python 2 için çalışır:

resp.text bir unicode dize, resp.text.encode ise ('utf-8') çalışmalıdır.

+0

Yazar açıkça python 3 kullanıyorsa, bu yinelenen başvuruda bulunandan daha iyi bir yanıttır. +1 (Bu kod, parantezsiz baskı ifadeleriyle belirtildiği gibi python2.x şeklindedir.) – BlackVegetable

+1

'io.open' işlevini kullanın ve Python 2 ve 3 ile çalışır. –