[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)
코드 설명:
urllib.parse.quote
: 이 함수는 URL에서 비ASCII 문자를 퍼센트 인코딩된 형태로 변환한다.safe=':/'
는:/
문자들이 인코딩되지 않도록 예외로 지정한다.encoded_url
: 인코딩된 URL을 저장한다.urlopen
: 인코딩된 URL을 사용하여 요청을 보낸다.
이 코드를 사용하면 한글이 포함된 URL에서도 정상적으로 요청을 보낼 수 있다.