이전글


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&param1=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




더욱 자세한 내용은 공식문서 참고
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,