2016-04-12 7 views
-1

Ich schreibe Code, um Informationen von der NPR-API zu erhalten, und ich laufe immer wieder in einen Kodierungsfehler. Ich habe versucht, .encode('utf-8'), aber ich kann nicht scheinen, wo ich es finde und ich bekomme immer einen Fehler.'ascii' Kodierungsfehler in Python

Dies ist mein Code:

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") 

Der Fehler, die ich bekommen ist:

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

auf der Linie f.write(resp.text)

+1

Possible Duplikat [UnicodeEncodeError: 'ASCII' codec Zeichen nicht kodieren, können u '\ u2019' in Position 47: ordinal nicht im Bereich (128)] (http://stackoverflow.com/questions/26641027/unicodeencodeerror- ascii-codec-cant-encode-zeichen-u-u2019-in-position-4) – usr2564301

Antwort

1

Öffnen Sie die Datei als Textdatei mit utf-8-Kodierung:

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

Das funktioniert aber nur für Python 3.

Python 2:

Wenn resp.text ein Unicode-String ist, resp.text.encode ('utf-8') arbeiten soll.

+0

Wenn der Autor explizit Python 3 verwendet, ist dies eine bessere Antwort als die, die in der doppelten Referenz gefunden wird. +1 (Das heißt, dieser Code ist python2.x, wie durch die Klammer-lose Druckanweisungen angezeigt.) – BlackVegetable

+1

Verwenden Sie 'io.open' und es funktioniert mit Python 2 und 3. –