2017-11-22 5 views
1

DarkSky APIを照会するリクエストを使用すると、UTF-8でエンコードされたドキュメントが返されますが、文字列はデフォルトでエラーのあるASCIIになります。私がUTF-8として明示的にエンコードすると、エラーはありませんが、文字列に余分な文字と生のUnicodeが含まれています。どうしたの?私は、SublimeでUTF-8エンコーディングを使うようにpyファイルを設定しました。返しPythonリクエストではUTF-8だと言われています。なぜユニコード文字が残っているのですか?

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

:返し application/json; charset=utf-8

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

Daily Summary: b'No precipitation throughout the week, with temperatures rising to 82\xc2\xb0F on Tuesday.' Unicodeテキストと正面に余分な文字や引用された部分文字列で何が起こっている

答えて

0

ここには何の問題もありません。 JSONをデコードしてもエラーは発生せず、UTF-8にエンコードするとバイト文字列リテラルrepr b'...'が正常に生成されます。トップビットセットバイトは、バイト文字列リテラルで\xXXのように見えます。

string is defaulting to ASCII with error

どういう意味ですか?実際の問題を教えてください。

私の推測では、ASCII以外の文字をWindowsの端末に印刷して、UnicodeEncodeErrorを取得しようとしています。その場合は、Windowsコンソールが壊れており、Unicodeを適切に印刷できないためです。 PEP 528は、Python 3.6の問題を回避します。

+0

MacでSublimeを使用していますが、それでも問題になる可能性があります。 Python 3.6.3で同じコードを実行しています。 IDEはユニコードのテキストとシンボルを表示します。最初にエラーが発生しました: print UnicodeEncodeError: 'ascii'コーデックは、文字 '\ xb0'を位置69にエンコードできません:序数は範囲外(128) ' IDEに同じd_summaryを印刷すると、 ''降水は一週間中、気温は木曜日に64°Fに下がります.'' – Ben

+0

Ah! https://stackoverflow.com/questions/39576308/printing-utf-8-in-python-3-using-sublime-text-3のように聞こえます! – bobince

+0

ありがとうございました!私はまだコーディングに新しいですし、私はこれで時間を投げました。最終的に何が起こっていたか、それを修正する方法を理解してうれしい! – Ben

関連する問題