파이썬에서는 모든 문자열은 유니코드입니다. 항상 헷갈리는 인코딩과 디코딩에 대해서 정리한 문서입니다.
인코딩
문자열을 바이트코드
로 변환함
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 bytes
→ encode 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
- 입력으로 받은 바이트 문자열을 가능한한 가장 빨리 유니코드 문자열로 디코딩 할 것.
- 변환된 유니코드 문자열로만 함수나 클래스등에서 사용할 것.
- 입력에 대한 결과를 전송하는 마지막 부분에서만 유니코드 문자열을 인코딩해서 리턴할 것.
4. 쿠키의 값이 숫자와 알파벳이 아닌 바이너리 값을 포함하면, base64로 인코딩해주어야한다.