2016-04-12 2 views
-1

Я пишу код для получения информации от NPR API, и я продолжаю работать с ошибкой кодирования. Я пробовал .encode('utf-8'), но я не могу найти, куда его поместить, и я все время получаю сообщение об ошибке.Ошибка кодирования ascii в python

Это мой код:

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

ошибка, что я получаю:

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

на линии f.write(resp.text)

+1

Возможный дубликат кодека UnicodeEncodeError: 'ascii' не может кодировать символ u '\ u2019' в позиции 47: порядковый номер не в диапазоне (128)] (http://stackoverflow.com/questions/26641027/unicodeencodeerror- ascii-codec-cant-encode-character-u-u2019-in-position-4) – usr2564301

ответ

1

Открыть файл в виде текстового файла с UTF-8 кодировкой:

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

Но это работает только для Python 3.

Python 2:

Если resp.text является юникода строка, resp.text.encode ('UTF-8') должен работать.

+0

Если автор явно использует python 3, это лучший ответ, чем тот, который встречается в дубликатной ссылке. +1 (Тем не менее, этот код - python2.x, как указано в операторах без скобок). – BlackVegetable

+1

Используйте 'io.open' и он работает с Python 2 и 3. –