코딩의 기술

코딩의 기술/파이썬, 02 Bytes 와 Str 의 차이

LEEHANDS 2022. 3. 10. 13:10
반응형

파이썬에는 문자열 데이터의 시퀀스를 표현하는 두가지 타입이 있다.

바로 Bytes 와 str 이다.

아래 코드와 같이 bytes 타입의 인스턴스에는 부호가 없는 8바이트 데이터가 그대로 들어간다.

 

a = b'h\x65llo'

print(list(a))
print(a)

\x65 는 0x65의 ascii 코드 값을 변경하면 알파벳 'e'

실행 결과

>>[104, 101, 108, 108, 111]
>>b'hello'

 

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

a = 'a\u0300 propos'
print(list(a))
print(a)

 

>>['a',''',' ','p','r','o','p','o','s']
>>a propos

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

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

일반적으로 UTF-8이 시스템 디폴트 인코딩 방식이다.

 

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

print(repr(to_str(b'foo')))
print(repr(to_str('bar')))
print(repr(to_str(b'\xed\x95\x9c')))

실행결과

 

이진 8비트 값과 유니코드 문자열을 파이썬에서 다룰 때 꼭 기억해야 할 것

1. bytes 와 str 이 똑같이 작동하는 것처럼 보이지만 각각 인스턴스는 서로 호환되지 않기때문에 전달 중인
    문자 시퀀스가 어떤 타입인지 항상 인지 해야함

2. + 연산자를 사용하면 bytes 를 bytes 에 더하거나 str 을 str 에 더하거나할 수 있다.     bytes와 str을 조합할 수는 없다.

반응형