bytes와 str

honeybeeveloper·2022년 8월 28일
0

python에는 문자열을 표현하는 두 가지 타입이 있다.
bytes와 str !

bytes

bytes 타입의 인스턴스는 부호가 없는 8바이트 데이터가 들어간다.

# python 3.8

bytes_hello = b'hello'
print(list(bytes_hello))    # [104, 101, 108, 108, 111]
print(bytes_hello)    # b'hello'

str

str 타입의 인스턴스는 사람이 사용하는 언어의 문자를 표현하는 유니코드 코드포인트가 들어간다.

# python 3.8

str_hello = 'hello'
print(list(str_hello))    # ['h', 'e', 'l', 'l', 'o']
print(str_hello)    # hello

bytes와 str

bytes 인스턴스에는 직접 대응하는 텍스트 인코딩이 없고,
str 인스턴스에는 직접 대응하는 이진 인코딩이 없다.

이진 데이터를 유니코드 데이터로 변환하려면 bytes의 decode 메서드를 호출해야하고,
유니코드 데이터를 이진 데이터로 변환하려면 str의 encode 메서드를 호출해야한다.

  • 이진 데이터를 유니코드 데이터로 변환
# python 3.8

def to_str(bytes_or_str):
    if isinstance(bytes_or_str, bytes):
        return bytes_or_str.decode('utf-8')
    else:
        return bytes_or_str


print(to_str(bytes_hello))    # hello
print(to_str(str_hello))    # hello
print(repr(to_str(bytes_hello)))    # 'hello'
print(repr(to_str(str_hello)))    # 'hello'
  • 유니코드 데이터를 이진 데이터로 변환
# python 3.8

def to_bytes(bytes_or_str):
    if isinstance(bytes_or_str, str):
        return bytes_or_str.encode('utf-8')
    else:
        return bytes_or_str


print(to_bytes(bytes_hello))    # b'hello'
print(to_bytes(str_hello))    # b'hello'
print(repr(to_bytes(bytes_hello)))    # b'hello'
print(repr(to_bytes(str_hello)))    # b'hello'

bytes와 str 연산

bytes와 str 각각 인스턴스는 서로 호환되지 않는다. 즉, 서로 연산자를 이용할 수 없다.

# python 3.8

print(bytes_hello + bytes_hello)    # b'hellohello'
print(str_hello + str_hello)    # hellohello
print(bytes_hello + str_hello)
# Traceback (most recent call last):
#   print(bytes_hello + str_hello)
# TypeError: can't concat str to bytes





참고 : 책 <파이썬 코딩의 기술>

profile
꿀벌같은 개발자가 되고 싶습니다.

0개의 댓글