응답의 apparent_encoding
속성이 어떻게 잘못 될 수 있습니까?
아래 코드 스 니펫이 있으며 내 질문을 보여줍니다.
import requests
url = "https://item.jd.com/100000177760.html"
r = requests.get(url)
print(r.status_code, r.encoding) # 200, gbk (correct)
print(r.apparent_encoding) # GB2312 (wrong)
요청은 응답의 문자 인코딩을 어떻게 결정합니까?
요청 은 응답의 Content-Type 헤더의 매개 변수 에서 인코딩을 추출 합니다 charset
. charset
헤더에 no 가 있고 content-type이 "text"유형 인 경우 ISO-8859-1 (latin-1)이 가정됩니다. 그렇지 않으면 응답의 apparent_encoding
속성이 평가 되고의 값으로 사용됩니다 r.encoding
.
apparent_encoding
응답 본문의 인코딩을 추측하기 위해 chardet 라이브러리를 사용하여 결정됩니다 .
문제의 URL의 경우 인코딩은 Content-Type 헤더에 선언됩니다.
>>> r.headers['Content-Type']
'text/html; charset=gbk'
따라서 r.apparent_encoding
를 실행하여 명시 적으로 액세스 할 때까지 평가되지 않습니다 print(r.apparent_encoding)
.
이 특별한 경우에 chardet은 잘못된 것으로 보입니다. 응답의 텍스트 속성은 gbk 코덱으로 인코딩 할 수 있지만 GB2312로는 인코딩 할 수 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다