반응형
파이썬에는 문자열 데이터의 시퀀스를 표현하는 두가지 타입이 있다.
바로 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을 조합할 수는 없다.
반응형
'코딩의 기술' 카테고리의 다른 글
코딩의 기술/파이썬, 03 Bound method call & Unbound method call (0) | 2022.03.15 |
---|---|
코딩의 기술/파이썬, 01 PEP 8 스타일 가이드 (0) | 2022.03.10 |