sourcetip

요청이 바이트를 반환하고 디코딩에 실패함

fileupload 2023. 3. 29. 21:46
반응형

요청이 바이트를 반환하고 디코딩에 실패함

기본적으로 웹 사이트에 요청하여 바이트 응답을 받았습니다.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

반응형