Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 인코딩과 디코딩의 차이점은 무엇일까?

Python에서 인코딩(encoding)은 유니코드 문자열을 바이트(bytes) 문자열로 표현하는 과정을 의미하며, 디코딩(decoding)은 그 반대로 바이트 문자열을 다시 유니코드 문자열로 변환하는 과정을 뜻합니다.

언제 인코딩하고, 언제 디코딩할까?

일반적으로 유니코드 문자열을 입출력(IO)에 사용할 때 인코딩을 수행합니다. 예를 들어 네트워크를 통해 데이터를 전송하거나 디스크 파일에 저장하는 경우가 대표적입니다. 반대로 네트워크나 디스크 파일로부터 문자열 데이터를 받았을 때는 디코딩을 수행하여 사람이 읽을 수 있는 유니코드 문자열로 되돌립니다.

문자열 인코딩하기

지정한 인코딩 방식으로 문자열을 인코딩하려면 encode() 메서드를 사용합니다.

>>> 'æøå'.encode('utf-8')
b'\xc3\xa6\xc3\xb8\xc3\xa5'

바이트 디코딩하기

바이트를 다시 문자열로 되돌리려면, 인코딩할 때 사용한 것과 동일한 인코딩 방식으로 decode() 메서드를 호출해야 합니다.

>>> b'\xc3\xa6\xc3\xb8\xc3\xa5'.decode('utf-8')
'æøå'

위 예제에서 확인할 수 있듯이, utf-8로 인코딩된 바이트를 같은 방식으로 디코딩하면 원래의 유니코드 문자열 'æøå'과 완전히 동일하게 복원됩니다.

참고: Python 2와 Python 3의 차이

Python 2에서는 unicode 타입과 바이트 기반의 str 타입이 구분되어 있어, 유니코드 문자열을 나타낼 때 u'...' 접두사를 붙여야 했습니다. 반면 Python 3부터는 모든 문자열(str)이 기본적으로 유니코드이며, 바이트 데이터는 별도의 bytes 타입으로 처리합니다. 따라서 Python 3에서는 str.encode()로 바이트를 생성하고, bytes.decode()로 다시 문자열을 얻는 흐름이 표준적인 방식입니다.