2017-11-22 8 views
1

Verwendung von Anfragen zur Abfrage der DarkSky-API besagt, dass es ein UTF-8-codiertes Dokument zurückgibt, aber die Zeichenfolge standardmäßig auf ASCII mit Fehler gesetzt ist. Wenn ich explizit als UTF-8 codiere, gibt es keine Fehler, aber String enthält zusätzliche Zeichen und unformatierten Unicode. Was ist los? Ich habe meine Py-Datei so eingestellt, dass sie die UTF-8-Kodierung in Sublime verwendet.Python-Anfragen sagen, es ist UTF-8, also warum gibt es noch Unicode-Zeichen?

# Fetch weather data from DarkSky, parse resulting JSON 
try: 
url = "https://api.darksky.net/forecast/" + API_KEY + "/" + LAT + "," + LONG + "?exclude=[minutely,hourly,alerts,flags]&units=us" 
response = requests.get(url) 
data = response.json() 
print(response.headers['content-type']) 
print(response.encoding) 

, die zurückgibt: application/json; charset=utf-8

d_summary = data['daily']['summary'] 
print("Daily Summary: ", d_summary.encode('utf-8')) 

, die zurückgibt: Daily Summary: b'No precipitation throughout the week, with temperatures rising to 82\xc2\xb0F on Tuesday.'

Was mit Unicode-Text mit den zusätzlichen Zeichen vor und zitierte Teilzeichenfolge los?

Antwort

0

Ich sehe hier kein Problem. Das Decodieren des JSON verursacht keinen Fehler, und die Codierung in UTF-8 erzeugt wie erwartet ein Bytezeichenfolge-Literal b'...'. Es wird erwartet, dass Byte mit oberster Bitmenge in Bytezeichenfolgenliteralen wie \xXX aussehen.

string is defaulting to ASCII with error

Was meinst du damit? Bitte zeigen Sie uns das eigentliche Problem.

Meine Vermutung ist, Sie versuchen, Nicht-ASCII-Zeichen auf dem Terminal unter Windows zu drucken und UnicodeEncodeError zu erhalten. Wenn dies der Fall ist, ist die Windows-Konsole defekt und kann Unicode nicht korrekt drucken. PEP 528 funktioniert um das Problem in Python 3.6.

+0

Verwendung von Sublime auf einem Mac, aber das könnte immer noch das Problem sein. Den gleichen Code im Python ausführen 3.6.3. IDE zeigt den Unicode-Text und die Symbole gut an. Zuerst der Fehler von Sublime: 'print (" Tägliche Zusammenfassung: ", d_summary)' erzeugt 'UnicodeEncodeError: 'ascii' Codec kann das Zeichen '\ xb0' nicht an Position 69 codieren: Ordnungszahl nicht im Bereich (128)' Drucken der gleichen d_summary in der IDE gibt 'No Niederschlag während der Woche, mit Temperaturen bei 64 ° F am Donnerstag Boden. – Ben

+0

Ah! Klingt wie https://stackoverflow.com/questions/39576308/printing-utf-8-in-python-3-using-sublime-text-3 dann! – bobince

+0

Vielen Dank! Ich bin noch neu im Programmieren und habe Stunden damit verbracht. Freut mich endlich zu verstehen, was los ist und wie ich es beheben kann! – Ben

Verwandte Themen