2017-11-22 16 views
1

DarkSky API를 쿼리하는 요청을 사용하면 UTF-8로 인코딩 된 문서가 반환되지만 string은 오류가있는 ASCII로 기본 설정됩니다. UTF-8로 명시 적으로 인코딩하면 오류는 없지만 문자열에는 추가 문자와 원시 유니 코드가 포함됩니다. 무슨 일이야? 하위 파일에서 UTF-8 인코딩을 사용하도록 py 파일을 설정했습니다. 반환파이썬 요청은 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.' 유니 코드 텍스트 앞에 추가 문자와 인용 문자열로 무슨 일이야

?

답변

0

여기에는 아무런 문제가 없습니다. JSON을 디코딩해도 오류가 발생하지 않으며 UTF-8로 인코딩하면 바이트 문자열 리터럴 repr b'...'이 예상대로 생성됩니다. 최상위 비트 세트 바이트는 바이트 문자열 리터럴에서 \xXX처럼 보일 것으로 예상됩니다.

string is defaulting to ASCII with error

그게 무슨 뜻인가요? 실제 문제를 알려주십시오.

내 생각에 비 ASCII 문자를 Windows의 터미널에 인쇄하고 UnicodeEncodeError을 얻으려고합니다. 그렇다면 Windows 콘솔이 손상되어 유니 코드를 제대로 인쇄 할 수 없기 때문입니다. PEP 528은 Python 3.6에서이 문제를 해결합니다.

+0

Mac에서는 Sublime을 사용하지만 여전히 문제가 될 수 있습니다. 파이썬 3.6.3에서 같은 코드를 실행합니다. IDE는 유니 코드 텍스트와 기호를 잘 표시합니다. 먼저 서브리스트에서 오류 : 'print ("일간 요약 :"d_summary)'는 UnicodeEncodeError : 'ascii'코덱이 69 바이트 문자 '\ xb0'을 인코딩 할 수 없습니다 : 서수가 범위 내에 있지 않습니다 (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