파이썬 소스 코드에서 나는 다음과 같은 문자열 앞에 작은 b 를 본 것을 우연히 발견 했습니다.
b"abcdef"
u
유니 코드 문자열을 나타내는 r
접두사 와 원시 문자열 리터럴 의 접두사에 대해 알고 있습니다.
뭐라고 않습니다 b
및 종류의 소스 코드의있는 스탠드 접두어가없는 일반 문자열처럼 정확하게 것으로 보인다 유용하다?
답변
이것은 Python3 bytes
리터럴 입니다. 이 접두사는 Python 2.5 및 이전 버전에는 없습니다 (일반 문자열 2.x에 해당하는 반면 일반 문자열 3.x는 u
접두어 2.x 에있는 리터럴에 해당 ). Python 2.6 이상에서는 3.x와의 호환성을 위해 일반 문자열과 동일합니다 .
답변
b
접두사는 의미 bytes
문자열 리터럴을 .
Python 3 소스 코드에서 사용되는 경우 표현식은 일반 유니 코드 객체가 아닌 bytes
객체를 생성 합니다 . Python 셸에서 또는 목록, dict 또는 기타 컨테이너 콘텐츠의 일부로 에코되는 경우이 표기법을 사용하여 표현 된 객체 를 볼 수 있습니다 .str
bytes
bytes
객체는 기본적으로 0-255 범위의 정수 시퀀스를 포함하지만, 표시 될 때 Python 은이 바이트를 ASCII 코드 포인트 로 표시 하여 내용을 더 쉽게 읽을 수 있도록합니다. 외부 모든 바이트 인쇄 가능한 ASCII 문자의 범위는 이스케이프 시퀀스 (예 :로 표시됩니다 \n
, \x82
등). 반대로 ASCII 문자와 이스케이프 시퀀스를 모두 사용하여 바이트 값을 정의 할 수 있습니다. ASCII 값의 경우 숫자 값이 사용됩니다 (예 : b'A'
== b'\x41'
).
bytes
객체는 정수 시퀀스로 구성 되기 때문에 bytes
목록과 같이 0-255 범위의 값을 가진 다른 정수 시퀀스에서 객체를 생성 할 수 있습니다 .
bytes([72, 101, 108, 108, 111])
및 인덱싱은 정수를 다시 제공합니다 (그러나 슬라이스가 새로운 생산 bytes
값을, 위의 예를 들어, value[0]
당신을 제공 72
하지만, value[:1]
이다 b'H'
(72)는 대문자의 ASCII 코드 포인트이기 때문에 H가 ).
bytes
인코딩 된 텍스트를 포함한 모델 이진 데이터 . 값에 텍스트가 포함되어 있으면 먼저 올바른 코덱을 사용하여 디코딩해야합니다. 예를 들어 데이터가 UTF-8로 인코딩 된 경우 다음을 사용하여 유니 코드 값을 얻을 수 있습니다 .bytes
str
strvalue = bytesvalue.decode('utf-8')
반대로, 텍스트에서 이동 str
에 객체 bytes
당신이 필요로 인코딩 . 사용할 인코딩을 결정해야합니다. 기본값은 UTF-8을 사용하는 것이지만 필요한 것은 사용 사례에 따라 크게 달라집니다.
bytesvalue = strvalue.encode('utf-8')
생성자를 사용 bytes(strvalue, encoding)
하여 동일한 작업을 수행 할 수도 있습니다 .
디코딩 및 인코딩 방법은 모두 오류 처리 방법 을 지정 하기 위해 추가 인수를 사용합니다 .
Python 2, 버전 2.6 및 2.7은 또한 b'..'
문자열 리터럴 구문을 사용하여 문자열 리터럴 생성을 지원하여 Python 2와 3 모두에서 작동하는 코드를 쉽게 만듭니다.
bytes
객체는 str
문자열 처럼 불변 입니다. 가변 바이트 값이 필요한 경우 bytearray()
객체를 사용하십시오 .