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

파이썬 바이트 문자열(bytes)이란? 개념부터 decode/encode 활용법까지

문자열과 바이트 문자열, 무엇이 다를까?

문자열(string)은 문자(character)들의 연속입니다. 문자는 추상적인 개념이기 때문에 그 자체로는 디스크에 직접 저장할 수 없습니다. 반면 바이트 문자열(byte string)은 바이트(byte)들의 연속으로, 실제로 디스크에 저장할 수 있는 데이터 형태입니다.

이 둘을 연결해 주는 것이 바로 인코딩(encoding)입니다. 인코딩 방식은 종류가 매우 많고 이론상 무한히 많은 조합이 가능합니다. 따라서 변환을 수행하려면 해당 데이터에 어떤 인코딩이 적용되어 있는지 반드시 알아야 합니다. 같은 바이트라도 해석하는 인코딩에 따라 전혀 다른 문자열이 될 수 있기 때문입니다.

같은 바이트, 다른 디코딩 결과

아래 예제는 동일한 바이트 문자열을 utf-16과 utf-8 두 가지 인코딩으로 각각 디코딩한 결과입니다.

>>> b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'.decode('utf-16')
'蓏n'蓏콯캁澽苏'
>>> b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'.decode('utf-8')
'τoρνoς'

잘못된 인코딩으로 디코딩하면 위처럼 의미를 알 수 없는 글자가 출력됩니다. 즉, 데이터가 어떤 인코딩으로 작성되었는지 정확히 파악하는 것이 올바른 변환의 첫걸음입니다.

decode()와 encode() 메서드 활용법

적용할 인코딩을 안다면 바이트 문자열의 .decode() 메서드를 호출해 올바른 문자열을 얻을 수 있습니다. 반대로 문자열의 .encode() 메서드는 문자열을 바이트 문자열로 변환합니다.

>>> '안녕하세요'.encode('utf-8')
b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94'

핵심 정리

  • str: 사람이 읽고 다루는 문자의 연속 (추상적 개념)
  • bytes: 저장·전송 가능한 바이트의 연속 (실제 데이터)
  • encoding: str과 bytes 사이의 변환 규칙 (utf-8, utf-16, euc-kr 등)
  • bytes → str 변환은 decode(), str → bytes 변환은 encode()

파일 입출력, 네트워크 통신, 외부 API 연동처럼 바이트 단위로 데이터를 다룰 때는 항상 인코딩을 명확히 지정하는 습관을 들이면 UnicodeDecodeError 같은 인코딩 오류를 효과적으로 예방할 수 있습니다.