URL에서 이스케이프 된 문자 디코딩


83

이스케이프 문자가있는 URL이 포함 된 목록이 있습니다. 이러한 문자는 urllib2.urlopenhtml 페이지를 복구 할 때 설정되었습니다 .

http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&action=edit
http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&action=history
http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&variant=zh 

파이썬에서 이스케이프되지 않은 형태로 다시 변환하는 방법이 있습니까?

추신 : URL은 utf-8로 인코딩됩니다.

답변:


144

공식 문서.

urllib.unquote()

%xx이스케이프를 해당하는 단일 문자로 바꿉니다 .

예 : unquote('/%7Econnolly/')수율 '/~connolly/'.

그리고 디코딩 만하면됩니다.


업데이트 : Python 3의 경우 다음을 작성합니다.

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

Python 3 문서.


unquote는 내가 위에서 말한 것처럼 보여줍니다. url은 중국어이고 인용되지 않은 문자가 아닌 원래 문자로 디코딩하고 싶습니다
Tony

3
@dyoser 질문에 이것을 넣어야합니다.
Kris Harper

@ root45 이것은 하나의 답변에 대한 주석입니다 ... 그래서 여기에 좋습니다. 감사합니다.
Tony

11
python3를 들어,이 것을 그냥 참고urllib.parse.unquote
타이푼의

4
python3의 경우도 있습니다urllib.request.unquote
Ben


11

또는 urllib.unquote_plus

>>> import urllib
>>> urllib.unquote('erythrocyte+membrane+protein+1%2C+PfEMP1+%28VAR%29')
'erythrocyte+membrane+protein+1,+PfEMP1+(VAR)'
>>> urllib.unquote_plus('erythrocyte+membrane+protein+1%2C+PfEMP1+%28VAR%29')
'erythrocyte membrane protein 1, PfEMP1 (VAR)'

7

당신이 사용할 수있는 urllib.unquote


unquote를 사용하면 (감사합니다 ...)이 문자열이 sample.com/index.php?title= \ xe9 \ xa6 \ x96 \ xe9 \ xa1 \ xb5 & action = edi이고 중국어 문자 인 것을 압니다. ... 어떻게 볼 수 있습니까? 나는 이것이 유니 코드라고 생각합니다.
Tony

그것은 이미 귀하의 질문에 있습니다. 그것들은 UTF-8 바이트입니다. b"\xe9\xa6\x96\xe9\xa1\xb5".decode("utf-8")(이제 좀 더 현대적인 파이썬 구문을 사용하여) 유니 코드 문자열로 변환 할 수 있습니다 .
tripleee

5
import re

def unquote(url):
  return re.compile('%([0-9a-fA-F]{2})',re.M).sub(lambda m: chr(int(m.group(1),16)), url)

8
필요한 것을 수행하는 내장 라이브러리가 있는데 아마도 더 신중하게 정규식과 람다를 수동으로 사용하는 이유는 무엇입니까?
Brad Koch

6
멋진 솔루션! urllib2표준 파이썬 배포판의 일부가 아닙니다. re이다.
cxxl 2014
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.