2017-12-28 21 views
1

Ich Frage Github Jobs API mit Python3, mit der requests Bibliothek, aber in einen Fehler beim Parsen der Antwort.Json() auf "Anfragen" Antwort löst UnicodeEncodeError

Library: http://docs.python-requests.org/en/latest/

Code:

import requests 
import json 

url = 'https://jobs.github.com/positions.json?' 

response = requests.get(url) 

print(response.json()) 

Fehler:

UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 321: ordinal not in range(128)

Mit dieser API in der Vergangenheit mit Ruby habe ich noch nie in dieses Problem laufen .

Ich habe auch versucht, es in ein Wörterbuch zu konvertieren, aber es führte zu den gleichen Fehlern.

Es gibt andere Fragen zu SO über die UnicodeEncodeError (meistens re: Öffnen von Dateien), aber ich bin nicht vertraut mit Python und fand sie nicht hilfreich.

+0

Mögliche Duplikat [UnicodeEncodeError: ‚ascii‘ Codec kann nicht codiere das Zeichen u '\ xa0' an Position 20: Ordnungszahl nicht im Bereich (128)] (https://stackoverflow.com/questions/9942594/unicodeencodeerror-ascii-codec-cant-encode-character-u-xa0-in- Position-20) – Beefster

Antwort

0

Überprüfen Sie zunächst, ob die Antwort tatsächlich JSON ist. Versuchen Sie response.text zu drucken und sehen Sie, ob es wie ein gültiges JSON-Objekt aussieht.

Unter der Annahme, es es JSON: es ist sehr ey „Hack“, aber man kann die nicht-ASCII-Zeichen mit ihren entkam Unicode-Darstellung ersetzt werden:

def escape_unicode(c): 
    return c.encode('ascii', 'backslashreplace').decode('ascii') 

response = ... 

text = response.text 
escaped = re.sub(r'[^\x00-\x7F]', lambda m: escape_unicode(m.group(0)), text) 
json_response = json.loads(escaped)