이 코드가 파이썬 2에서와 파이썬 3에서 작동하지 않는 이유를 알아 내려고 정말 피곤합니다. json 페이지를 잡고 구문 분석하려고합니다. 그것.파이썬 2 대 파이썬 3 - urllib 형식
import urllib, json
response = urllib.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)
내가 파이썬 3에 해당하는 코드이 될 것 생각 : 여기 파이썬 2의 코드입니다
import urllib.request, json
response = urllib.request.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)
는하지만, 내 얼굴에 불어 때문에 읽기에 의해 반환 된 데이터 ()는 "바이트"유형입니다. 그러나, 나는 json이 구문 분석 할 수있는 무언가로 변환 할 수 없다. 나는 레딧 나에게 다시 UTF-8을 보내려고 헤더 알고,하지만 난 바이트 UTF-8로 디코딩 얻을 수없는 것 : 내가 잘못 뭐하는 거지
import urllib.request, json
response = urllib.request.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content.decode("utf8"))
?
편집 : 문제는 데이터를 사용 가능한 상태로 만들 수 없다는 것입니다. json이 데이터를로드하더라도 그 중 일부는 표시 할 수 없으므로 데이터를 화면에 인쇄 할 수 있기를 원합니다.
두 번째 편집 : 문제는 구문 분석보다 인쇄와 관련이 있습니다. Alex의 대답은 IO를 utf8로 설정하여 스크립트가 Python 3에서 작동하는 방법을 제공합니다. 하지만 여전히 문제는 남아 있습니다. 코드가 Python 2에서 작동하지만 Python 3에서는 작동하지 않는 이유는 무엇입니까?
코드 실수를 수정 해 드리겠습니다 ... 표시를 위해 다시 포맷하려했지만 모든 과정을 망쳤습니다. : P 데이터를 구문 분석 한 후에 (단순히 "인쇄 (데이터)"를 사용하여) 데이터를 볼 수 없습니다. charmap 오류가 나기 때문에 데이터를 볼 수 없습니다. –
@ 대니얼, 당신이 데이터를 얻은 이후의 문제는 데이터를 얻는 것에 관한이 질문과는 별개의 질문 인 것 같습니다. (제 대답은 반응을 보였습니다 - 당신이 동의하지 않았지만, 심지어 upvote 그것을!). 'data'에 의해'json.loads (response)'를 의미한다면, 문제없이 UTF-8을 지원하는 Mac Terminal.app에서'print '할 수 있습니다. sys.stdout.encoding이란 무엇입니까? 파이썬 3을 시작하기 전에 환경 변수'PYTHONIOENCODING : stdin/stdout/stderr'에 사용되는 인코딩 [: errors]을 올바르게 설정 했습니까? 등, 완전히 다른 문제는, 참조하십시오. –
처음에 불분명하면 죄송합니다. 핵심 문제는 어떤 이유로 든 (파싱은 단지 시작일 뿐이지 만, 프린트 할 수 없다면 어딘가에 문제가 생길 것입니다. 데이터 읽기). 인코딩을 확인해보고 내 W7 시스템에서 작동하지 않는다고 말하면됩니다. –