728x90
728x90
인코딩(Encoding)이란?
파일에 저장된 정보의 형태나 형식을 데이터 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태로 변환하는 처리 혹은 그 처리 방식을 말한다.
<이메일 등의 전송, 동영상이나 이미지 영역>에서 많이 사용되며, 반대말은 디코딩(decoding)이다.
URL 인코딩이란?
URL에서 URL로 사용할 수 없는 문자 혹은 URL로 사용할 수 있지만 의미가 왜곡될 수 있는 문자들을
'%XX'의 형태로 변환하는 것을 말한다. 즉, 컴퓨터가 이해할 수 있는 형식으로 바꿔주는것
왜 URL 인코딩을 사용할까?
인터넷을 통해 전송할 수 있는 문자는 오로지 ASCII 문자이기 때문이다. 따라서 ASCII 문자가
아닌 문자는 인터넷을 통해 전송할 수 있는 형태로 변환해줘야 한다. ASCII 문자라 하더라도 예약된 의미를 가지고 있는 문자의 경우( '/', '&', '=') 그 문자 자체의 의미를 전달하고 싶은 경우에는 이스케이프 처리가 필요하기 때문이다.
예약된 문자
'/'은 URL의 각 레벨을 구분해주는 역할을 맡고,
'&'는 쿼리 파라미터들을 구분해주는 역할을 맡으며,
'='은 쿼리 파리미터의 값을 지정해주는 역할을 맡는다.
..../?keyword=날씨&비
keyword라는 쿼리 파라미터의 값으로 '날씨&비'를 보내고 싶은 경우
여기서 '&'를 이스케이프 해주지 않으면 쿼리 파라미터의 구분자로 인식이 되어 왜곡된 의미를 전달
따라서 '&'를 '%26'으로 인코딩을 하여 문자 그대로의 '&'을 전달하고자 한다는 것을 나타내야 한다.
참고로, URL에서는 공백 문자가 허용되지 않기 때문에 공백 문자는 '%20' 혹은 '+'로 인코딩이 된다
Python에서 인코딩할 때 사용하는 라이브러리
# 아스키코드 형식이 아닌 글자를 URL 인코딩시켜줌
from urllib.parse import quote
# url 저장경로설정
from urllib.request import urlretrieve
# url 바이너리 원문 split, 아스키코드 형식이 아닌 글자를 URL 인코딩시켜줌
from urllib.parse import urlsplit, quote
# URL의 경로 섹션을 인용하기 위한 것 = string, safe, encoding=utf-8, errors
encode = quote(url, safe=":/()%") # safe = URL encoding에서 제외할 문자
'''
*binary바이너리란?*
.jpg, .png 나 .mp3, .exe 같은 것들이 바이너리에 해당
사용자 또는 프로그램이 사용하던 정보나 숫자를 가공없이 그대로 파일에 저장
*pil 데이터 변환과정*
byte객체 -> io.BytesIO 객체에 옮겨 담음 -> PIL image객체에 담음
https://amusesoul.com/web/upload/NNEditor/20220308/mobile/34bce377c9f02d5fa23df2cda5a47b80_1646665937.jpg(= decode)
https%3A%2F%2Famusesoul.com%2Fweb%2Fupload%2FNNEditor%2F20220308%2Fmobile%2F34bce377c9f02d5fa23df2cda5a47b80_1646665937.jpg(= encode)
'''
response = requests.get(url, verify=False)
img = Image.open(io.BytesIO(response.content))
# 이미지를 URI(?)로 전달하지않고 바이트 배열로 전달하기위해
# *Binary 형태로 이미지 데이터 읽은 다음 decode하는 방법*
# 보통 이미지 파일 경로를 매개변수로 넘겨주지만, 때에 따라선 io.BytesIO( ) 객체를 넘겨줄 수도 있다
# 객체를 넘겨주면 객체 내에 저장된 bytes 정보를 불러와 이미지로 읽어줌
# scheme='http', netloc='shop 주소', path='/places/default/view', query='', fragment=''
url_info = urlsplit(url)
# URL의 경로 섹션을 인용(=quote)하기 위한 것 = string, safe, encoding=utf-8, errors
# safe = URL encoding에서 제외할 문자
encode = quote(url_info.path, safe=":/()%")
728x90
댓글