요청이 바이트를 반환하고 디코딩에 실패함
기본적으로 웹 사이트에 요청하여 바이트 응답을 받았습니다.b'[{"geonameId:"703448"}..........'.
바이트 타입이지만 사람이 읽을 수 있고 json 목록처럼 보여서 혼란스럽습니다.실행 시 응답이 latin1로 인코딩된 것을 알고 있습니다.r.encoding
그것은 돌아왔다ISO-859-1
디코딩을 시도했지만 빈 문자열이 반환됩니다.지금까지의 내용은 다음과 같습니다.
r = response.content
string = r.decode("ISO-8859-1")
print (string)
여기가 빈 줄을 인쇄하는 곳이에요.하지만 내가 달릴 때
len(string)
알겠습니다: 되돌아가다31023
빈 문자열을 반환하지 않고 이러한 바이트를 디코딩하려면 어떻게 해야 합니까?
해석하려고 했습니까?json
모듈?
import json
parsed = json.loads(response.content)
또 다른 해결책은 응답을 사용하는 것입니다.text: Unicode로 내용을 반환합니다.
Type: property
String form: <property object at 0x7f76f8c79db8>
Docstring:
Content of the response, in unicode.
If Response.encoding is None, encoding will be guessed using
``chardet``.
The encoding of the response content is determined based solely on HTTP
headers, following RFC 2616 to the letter. If you can take advantage of
non-HTTP knowledge to make a better guess at the encoding, you should
set ``r.encoding`` appropriately before accessing this property.
있어r.text
그리고.r.content
첫 번째는 문자열이고 두 번째는 바이트입니다.
너는 원한다
import json
data = json.loads(r.text)
비슷한 문제에 직면했습니다.beautifulsoup4
그리고.requests
웹 페이지를 스크랩하는 동안 둘 다response.text
그리고.response.content
바이트인 것처럼 보였어요
포함된 응답 헤더'Content-Type': 'text/html; charset=UTF-8'
헤더 내의 부호화, 응답 헤더 내의 부호화도 다음과 같습니다.'Content-Encoding': 'br'
알고 보니 제가 이 시스템을 설치하지 않은 것 같습니다.brotlipy
환경 내 및 실행 중pip install brotlipy
내 문제를 해결했어내 생각에는 말이지…chardet
또는cchardet
충분하겠지만 데이터를 올바르게 압축 해제해야 했습니다.
여기서도 같은 방법으로 비슷한 문제가 해결되었습니다.또한 Brotli 압축을 명시적으로 검색하기 전까지는 나오지 않았기 때문에 이 답변에 링크할 수 있습니다.
언급URL : https://stackoverflow.com/questions/31708519/request-returns-bytes-and-im-failing-to-decode-them
'sourcetip' 카테고리의 다른 글
Chrome 개발자 도구에서 AJAX 응답 컨텐츠를 보시겠습니까? (0) | 2023.03.29 |
---|---|
웹에서 어셈블리 노드의 목적은 무엇입니까?설정? (0) | 2023.03.29 |
JSON에 목록 직렬화 (0) | 2023.03.29 |
Wordpress 3에서 커스텀 투고 유형에 커스텀 필드를 추가하려면 어떻게 해야 하나요? (0) | 2023.03.29 |
mongodb - 검색 후 집약하는 방법 (0) | 2023.03.29 |