인코딩과 디코딩

chrisjune
3 min readJul 8, 2019

--

파이썬에서는 모든 문자열은 유니코드입니다. 항상 헷갈리는 인코딩과 디코딩에 대해서 정리한 문서입니다.

https://sourcedexter.com/data-encodingdecoding-in-python/

인코딩

문자열을 바이트코드로 변환함

encode = 코드화 = 암호화라고 기억하자

파이썬에서 문자열은 유니코드로 처리합니다. 따라서 인코딩한다는 의미는 유니코드를 utf-8, euc-kr, ascii 형식의 byte코드로 변환하는 것을 의미합니다

>> str = '한글'>> encoded = str.encode('utf-8')
>> encoded
b'\xed\x95\x9c\xea\xb8\x80'
>> encoded = str.encode('euc-kr')
>> encoded
b'\xc7\xd1\xb1\xdb'

디코딩

바이트를 문자열로 변환

decode = 역 코드화 = 복호화라고 기억하자

파이썬에서 디코딩한다는 것은 바이트코드를 유니코드로 변환한다는 뜻합니다. 즉, utf-8, euc-kr, ascii 형식의 byte코드를 문자열로 변환합니다.

>> str = b'\xc7\xd1\xb1\xdb'
>> decoded = str.decode('euc-kr')
>> decoded
'한글'

인코딩된 바이트코드에서 다른 바이트 코드로 변환하려면?

바이트 코드를 유니코드로 디코딩후, 변경하려는 바이트 코드로 변환하면됩니다.

즉, decode bytesencode unicode

아래는 euc-kr 바이트코드를 utf-8로 변환하는 예입니다

>> str = b'\xc7\xd1\xb1\xdb'
>> decoded = str.decode('euc-kr')
>> decoded
'한글'
>> encoded = decoded.encode('utf-8')
>> encoded
b'\xc7\xd1\xb1\xdb'

개발할 때 기억하면 좋을 Tip

  1. 입력으로 받은 바이트 문자열을 가능한한 가장 빨리 유니코드 문자열로 디코딩 할 것.
  2. 변환된 유니코드 문자열로만 함수나 클래스등에서 사용할 것.
  3. 입력에 대한 결과를 전송하는 마지막 부분에서만 유니코드 문자열을 인코딩해서 리턴할 것.

4. 쿠키의 값이 숫자와 알파벳이 아닌 바이너리 값을 포함하면, base64로 인코딩해주어야한다.

--

--