2016-08-08 48 views
0

Ich hole JSON mit Anfragen von einer API (mit Python 3.5) und wenn ich versuche, den JSON entweder zu drucken (oder zu verwenden) response.text, json.loads (...) oder response.json(), bekomme ich einen UnicodeEncodeError."UnicodeEncodeError: 'Ascii' Codec kann nicht Zeichen" in Python3 kodieren

print(response.text) 
UnicodeEncodeError: 'ascii' codec can't encode character '\xc5' in position 676: ordinal not in range(128) 

Die JSON enthält eine Reihe von Wörterbuch mit Ländernamen und einige von ihnen enthalten Sonderzeichen, zum Beispiel: (nur ein Wörterbuch in der binären Matrix zum Beispiel)

b'[{\n "name" : "\xc3\x85land Islands"\n}] 

Ich habe keine Ahnung, warum Es gibt ein Codierungsproblem und auch warum "ascii" verwendet wird, wenn Requests eine UTF-8-Codierung erkennt (und sogar durch manuelle Einstellung auf UTF-8 nichts ändert).

Edit2: Das Problem war Microsoft Visual Studio Code 1.4. Es war nicht in der Lage, die Charaktere zu drucken.

+0

Der Fehler besagt, dass das Zeichen nicht sein kann * codiert * mit ascii - was bedeutet, dass das Problem nicht den Text liest/entschlüsselt, sondern in Bytes kodiert (beim Drucken) – janbrohl

+0

Mögliche Duplikate von [UnicodeEncodeError: 'ASCII Codec' kann das Zeichen u '\ xa0' nicht in Position 20 codieren: Ordnungszahl nicht im Bereich (128)] (http://stackoverflow.com/questions/994259 4/unicodeencodeerror-ascii-codec-cant-codieren-zeichen-u-xa0-in-position-20) –

Antwort

0

Wenn Ihr Code innerhalb von VS läuft, dann klingt es so, dass Python die Codierung der eingebauten Konsole nicht berechnen kann, so dass standardmäßig ASCII verwendet wird. Wenn Sie versuchen, ein Nicht-ASCII-Zeichen zu drucken, gibt Python einen Fehler aus und druckt stattdessen Text, der nicht angezeigt wird.

Sie können die Codierung von Python mithilfe der Umgebungsvariablen PYTHONIOENCODING erzwingen. Legen Sie es in der Ausführungskonfiguration für das Skript fest.

Visual Studio Konsole Je nach, können Sie weg mit:

PYTHONIOENCODING=utf-8 

oder Sie können eine typische 8-Bit-charset wie verwenden müssen:

PYTHONIOENCODING=windows-1252