본문 바로가기
IT 개인학습/Memo

Encoding 인코딩

by kiimy 2022. 5. 7.
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

'IT 개인학습 > Memo' 카테고리의 다른 글

Pillow image mode  (0) 2022.05.07
Pyspark  (0) 2022.05.07
Tempfile  (0) 2022.05.07
정규표현식  (0) 2022.05.07
Deploy  (0) 2022.05.07

댓글