이전글
Python URL 한글 인코딩 방법
GET 방식을 통해 HTTP 요청을 하게 되는 파라미터 정보는 경우 URL 뒤에 붙어 전송됩니다.
이때 URL은 ASCII 코드값만 사용되는데, 한글은 ASCII 코드로 표현할 수 없으므로 인코딩 해주어야 합니다.
urlencode()
쿼리스트링 파라미터를 Encoding 하기 위해서는 urlencode() 메서드를 사용합니다.
urlparse()에 대해서는 글 위의 이전글 링크를 참고해 주시기 바랍니다.
인코딩된 쿼리스트링은 문자열로 반환됩니다. 단 파라미터간의 앞 뒤 순서는 중요하지 않으므로 보장되지 않습니다.
from urllib import parse
url = parse.urlparse('http://www.exeam.org?examParam1=value1&examParam2=한글')
query = parse.parse_qs(url.query)
>>> parse.urlencode(query, doseq=True) #examParam2=%ED%95%9C%EA%B8%80&examParam1=value1 |
cs |
딕셔너리 또는 튜플로 만들어 인코딩 하는 방법
만약 urlparse()를 사용하여 쿼리스트링을 얻는것이 아닌 직접 쿼리스트링을 만들어 인코딩 하고 싶은 경우 딕셔너리 또는 key와 value로 맵핑된 튜플을 가진 리스트를 넘겨 사용 가능합니다.
튜플을 담은 리스트 사용시
from urllib import parse
query = [('examParam1', 'value1'), ('examParam2', '한글')]
>>> parse.urlencode(query, encoding='UTF-8', doseq=True) #examParam1=value1&examParam2=%ED%95%9C%EA%B8%80 |
cs |
딕셔너리 사용시
from urllib import parse
query = {
'examParam1' : 'value1',
'examParam2' : '한글'
}
>>> (parse.urlencode(query, encoding='UTF-8', doseq=True) #examParam1=value1&examParam2=%ED%95%9C%EA%B8%80 |
cs |
Charset 지정
인코딩 charset을 지정하고 싶은 경우 encoding 인자를 사용하여 인코딩을 지정해 줄 수 있습니다.
parse.urlencode(query, encoding='UTF-8', doseq=True)
|
cs |
doseq 인자값에 따른 시퀀스 처리 방식
만약 하나의 파라미터 key에 여러 개의 값을 가지는 경우도 있습니다.
ex)param1=aaaa¶m1=bbbb
이 경우 인코딩할 쿼리는 시퀀스 구조를 갖게 됩니다.
doseq가 False이거나 지정해주지 않는경우 시퀀스 자체가 문자열로 평가됩니다.
query = {
'examParam1' : 'value1',
'examParam2' : ['aaa', 'bbb']
}
>>> parse.urlencode(query, encoding='UTF-8') #examParam1=value1&examParam2=%5B%27aaa%27%2C+%27bbb%27%5D |
cs |
doseq가 True로 지정된 경우 여러개의 값이 존재하는것으로 해석됩니다.
query = {
'examParam1' : 'value1',
'examParam2' : ['aaa', 'bbb']
}
>>> parse.urlencode(query, encoding='UTF-8', doseq=True) #examParam2=aaa&examParam2=bbb&examParam1=value1 |
cs |
간단히 문자열만 인코딩 또는 디코딩 한는경우 - quote(), unquote()
쿼리스트링을 동째로 인코딩하는것이 아닌 값 자체만 인코딩 또는 디코딩 하는 경우 다음과 같이 사용합니다.
주의할 점은 쿼리스트링 pram1=value1 과 같이 key와 value를 동째로 넘기면 그대로 인코딩 된다는 점 입니다.
from urllib import parse
>>> parse.quote('한글') #%ED%95%9C%EA%B8%80
>>> parse.unquote('%ED%95%9C%EA%B8%80') #한글 |
cs |
더욱 자세한 내용은 공식문서 참고
'Python' 카테고리의 다른 글
[Python] Jupyter Notebook(주피터 노트북) 설치 (0) | 2018.06.22 |
---|---|
[Python] 파이썬 기본 에디터 IDLE(Integrated Development and Learning Environment) (2) | 2018.06.17 |
[Python] 파이썬 URL 다루는 법 (Python urllib) (0) | 2018.03.23 |
[Python] 파이썬 XML 다루는 법 (Python XML) (0) | 2018.03.23 |
[Python] 파이썬 다운로드 및 설치하기 (0) | 2017.12.26 |