스택큐힙리스트

파이썬에서 UTF-8 URL 디코딩하기 본문

카테고리 없음

파이썬에서 UTF-8 URL 디코딩하기

스택큐힙리스트 2023. 4. 17. 07:11
반응형

파이썬 2.7에서 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와 같은 경우, 예상 결과인 example.com?title==правовая+защита으로 디코딩하는 방법은 무엇인가요?

url=urllib.unquote(url.encode(utf8)) 해보았지만, 결과가 잘못된 것 같습니다.

답변 1

데이터는 URL 인용으로 이스케이프 된 UTF-8 인코딩된 바이트입니다. 따라서 투명하게 퍼센트 인코딩 된 데이터를 UTF-8 바이트로 디코딩 한 다음 텍스트로 변환하는 urllib.parse.unquote()와 함께 디코딩하려고 합니다.

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=правовая+защита'

파이썬 2의 해당 부분은 urllib.unquote() 입니다. 하지만 이 부분은 바이트 스트링을 반환하므로 수동으로 디코딩해야 합니다.

from urllib import unquote

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

답변 2

파이썬에서 UTF-8 URL 디코딩 방법

URL 디코딩은 URL 인코딩 시 사용된 특수문자를 다시 원래대로 디코딩하는 작업을 말합니다. 파이썬에서는 urllib 라이브러리에서 제공하는 unquote 함수를 사용하여 간편하게 디코딩할 수 있습니다.

하지만 UTF-8 문자열은 URL 인코딩 시 이스케이프 되는 방식이 다르기 때문에 일반적인 unquote 함수로 디코딩하면 제대로 처리되지 않을 수 있습니다. 이 경우, urllib.parse 모듈에서 제공하는 quote 함수를 사용하여 UTF-8 문자열을 먼저 이스케이프 처리한 다음, unquote 함수로 디코딩해야 합니다.

아래는 예시 코드입니다.

```python

import urllib.parse

# UTF-8 URL 디코딩

url = 'https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%EC%8D%AC'

escaped_url = urllib.parse.quote(url)

decoded_url = urllib.parse.unquote(escaped_url)

print(decoded_url)

```

위 코드에서는 한글이 포함된 URL을 UTF-8로 디코딩하고 있습니다. 먼저 urllib.parse 모듈의 quote 함수를 사용하여 URL을 이스케이프 처리한 후, unquote 함수로 다시 디코딩합니다. 결과는 'https://ko.wikipedia.org/wiki/파이썬'이 출력됩니다.

이처럼 파이썬에서는 UTF-8 URL 디코딩을 간편하게 처리할 수 있습니다. 디코딩 시 주의해야 할 점은 urllib 모듈의 unquote 함수만으로는 제대로 처리되지 않을 수 있으므로, quote 함수를 먼저 사용하여 이스케이프 처리해야 한다는 점입니다. 이를 잘 숙지하고 원하는 결과를 얻도록 노력해야 합니다.

반응형
Comments