Python/Effective python

[Python] 03. bytes, str, unicode의 차이점을 알자

본 포스팅은 <파이썬 코딩의 기술 (개정 2판)> 책을 공부하고 정리한 내용입니다.


파이썬의 문자 시퀀스

파이썬의 문자 시퀀스를 나타내는 방시은 유니코드 문자열 방식과 bytes(raw 8bit) 형식 2가지이다.

  • 파이썬 3은 문자는 str, bytes는 bytes 클래스로 표현
  • 파이썬 2는 문자는 Unicode, bytes는 str 클래스로 표현한다.

위와 같기 때문에, 파이썬 2와 파이썬 3을 섞어 쓸 때는 조심해야 한다.

bytes ?

bytes 인스턴스는 문자열 앞에 b를 붙여서 생성한다. ex : b'\x41'

bytes는 ascii상수로 이루어져 있다. 위 예를 디코딩하기 위해 해석해보면 '\x'가 나타내는 것은 이 코드는 hexa의 표현이라는 것이다. 그럼 10진수로 '\x41'은 몇일까? 65이다. 이제 65를 아스키 코드로 디코딩하면 된다.('A'의 ASCII가 65)

그렇기 때문에 위 b'\x41'은 디코딩하면 b'A'가 나올 것이다.

str과 bytes 간의 변환

  • str -> bytes : str의 encode 메소드 사용
  • bytes -> str : bytes의 decode 메소드 사용

Ubuntu기준으로 encoding, decoding은 모두 기본 인코딩인 'utf-8'을 사용하며, CP949'등 다른 인코딩을 사용하려면 메소드에 인자를 주면 된다.

'a'.encode(encoding='CP949') # 1
b'/x4r5'.decode('CP949') # 2

 

 

정리

  • bytes에는 8비트 시퀀스가 들어있고, str에는 유니코드 코드 포인트의 시퀀스가 들어있다.
  • 처리할 입력이 원하는 문자 시퀀스(8비트 값인지, UTF-8로 인코딩 된 문자열인지, 유니코드 코드 포인트들)인지 확인하려면 help함수를 이용하라
  • bytes와 str인스턴스를 (>,==,+,%)연산자에서 사용할 수 없다
  • 이진 데이터 파일에서 읽거나 파일에 쓰고 싶으면 항상 이진 모드('rb', 'wb')f로 파일을 열면된다.
  • 유니코드 데이터를 파일에서 읽거나 파일에 쓰고 싶을 때 시스템 디폴트 인코딩에 encoding parameter를 명시적으로 전달하라

 


2023.12.09 - [Python/Effective python] - [Python] 02. PEP8 스타일 가이드를 따르라

 

 

[Python] 02. PEP8 스타일 가이드를 따르라

본 포스팅은 책을 공부하고 정리한 내용입니다. PEP란? Python Enhancement Proposal 의 약자이다. 번역하면 파이썬 개선 제안서,,, 무슨 말이냐면 그냥.. 파이썬 코드를 어떻게 구성할지 정해주는 스타일

rabo0313.tistory.com

[[Python] 02. PEP8 스타일 가이드를 따르라

본 포스팅은 책을 공부하고 정리한 내용입니다. PEP란? Python Enhancement Proposal 의 약자이다. 번역하면 파이썬 개선 제안서,,, 무슨 말이냐면 그냥.. 파이썬 코드를 어떻게 구성할지 정해주는 스타일

rabo0313.tistory.com](https://rabo0313.tistory.com/entry/Python-02-PEP8-%EC%8A%A4%ED%83%80%EC%9D%BC-%EA%B0%80%EC%9D%B4%EB%93%9C%EB%A5%BC-%EB%94%B0%EB%A5%B4%EB%9D%BC)