파이썬에서 UTF-8로 UTF-8 디코딩


245

나는 파이썬에서 초보자 인 한 많은 시간을 보냈다.
그런 URL을 어떻게 해독 할 수 있습니까?

example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0

파이썬 2.7에서 이것에 : example.com?title==правовая+защита

url=urllib.unquote(url.encode("utf8")) 아주 못생긴 것을 반환합니다.

여전히 해결책이 없으며 도움을 주시면 감사하겠습니다.


2
일반적으로 URL의 꼬리는 쿠키 일뿐입니다. 서버가 사용하는 로컬 문자 세트 인코딩 또는 URL이 문자열 또는 완전히 다른 것을 인코딩하는지 여부를 알 수 없습니다. (많은 URL 사람이 읽을 수있는 문자열을 인코딩하는 경우가 많으며 종종 인코딩을 매우 쉽게 추측 할 수 있습니다. 그러나 일반적으로 또는 완전히 자동으로 가능하지는 않습니다.)
tripleee

답변:


398

데이터는 당신이 원하는, 그래서 UTF-8로 인코딩 된 바이트, URL은 인용과 함께 탈출이다 디코딩 으로 urllib.parse.unquote(), 이는 투명, UTF-8 바이트에 다음 텍스트 %로 인코딩 된 데이터로 디코딩 핸들 :

from urllib.parse import unquote

url = unquote(url)

데모:

>>> from urllib.parse import unquote
>>> url = 'example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0'
>>> unquote(url)
'example.com?title=правовая+защита'

Python 2와 동등한 것은 urllib.unquote()이지만 바이트 문자열을 반환하므로 수동으로 디코딩해야합니다.

from urllib import unquote

url = unquote(url).decode('utf8')

그렇다면 왜 + 문자가 문자열에 남아 있습니까? % 2B는 + 문자이고 + 리터럴은 디코딩 중에 제거되었다고 생각 했습니까?
AlexLordThorsen

5
@Rawrgulmuffins +x-www-form-urlencoded데이터 의 공간입니다 . 당신이 사용하는 거라고 urllib.parse.parse_qs()그 구문 분석, 또는 사용 urllib.parse.unquote_plus(). 그러나 나머지 URL이 아닌 쿼리 문자열에만 나타나야합니다.
Martijn Pieters

140

Python 3을 사용하는 경우 사용할 수 있습니다 urllib.parse

url = """example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0"""

import urllib.parse
urllib.parse.unquote(url)

제공합니다 :

'example.com?title=правовая+защита'

이것을 사용하고 python3.8에서 쿼리 문자열 대신 dict 얻기
Clocker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.