Python프로그래밍

[Python urllib] 파이썬 한글이 포함된 URL 호출시 UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 5-6: ordinal not in range(128) 오류 수정 방법

특정 url을 urllib를 사용하여 html를 읽어오려고 하는데, 오류가 발생한다.

오류 내용은 다음과 같다.

오류가 발생한 코드는 아래와 같다.

    sUrl =''
context = ssl._create_unverified_context()
    request = urllib.request.urlopen(sUrl, context=context)
    html = request.read()


오류 해결방법

urllib 라이브러리를 사용할 때, URL에 한글이 포함되어 있으면 UnicodeEncodeError가 발생할 수 있다. 이는 URL을 ASCII로 인코딩하려고 시도하는 과정에서 발생하는 문제이다. 이를 해결하기 위해 URL을 인코딩해야한다.

파이썬의 urllib.parse.quote 함수를 사용하여 URL의 비ASCII 문자를 인코딩할 수 있다.

import urllib.request
import urllib.parse
import ssl

# 원본 URL
url = "https://test.com/서울시/강남구/"

# URL 인코딩
encoded_url = urllib.parse.quote(url, safe=':/')

# SSL 컨텍스트 (필요 시)
context = ssl._create_unverified_context()

# 인코딩된 URL을 사용하여 요청 보내기
request = urllib.request.urlopen(encoded_url, context=context)

# 응답 읽기 (예시)
response = request.read()
print(response)

코드 설명:

  1. urllib.parse.quote: 이 함수는 URL에서 비ASCII 문자를 퍼센트 인코딩된 형태로 변환한다. safe=':/':/ 문자들이 인코딩되지 않도록 예외로 지정한다.
  2. encoded_url: 인코딩된 URL을 저장한다.
  3. urlopen: 인코딩된 URL을 사용하여 요청을 보낸다.

이 코드를 사용하면 한글이 포함된 URL에서도 정상적으로 요청을 보낼 수 있다.

error: Content is protected !!