프로그래밍 언어/Python

Python 3에서 문자열을 바이트로 변환하는 가장 좋은 방법

Rateye 2021. 11. 22. 10:46
728x90
반응형
질문 : Python 3에서 문자열을 바이트로 변환하는 가장 좋은 방법은 무엇입니까?

TypeError에 대한 답변에서 볼 수 있듯이 문자열을 바이트로 변환하는 방법에는 두 가지가 있습니다 . 'str'은 버퍼 인터페이스를 지원하지 않습니다.

이 방법 중 어느 것이 더 좋거나 더 Pythonic입니까? 아니면 개인적인 취향의 문제입니까?

b = bytes(mystring, 'utf-8')

b = mystring.encode('utf-8')
답변

bytes 에 대한 문서를 보면 bytearray 가리 킵니다.

bytearray ([소스 [, 인코딩 [, 오류]]])

새로운 바이트 배열을 반환합니다. bytearray 유형은 0 <= x <256 범위의 정수의 가변 시퀀스입니다. 가변 시퀀스 유형에 설명 된 대부분의 일반적인 가변 시퀀스 메서드와 바이트 유형에 포함 된 대부분의 메서드가 있습니다. Bytes 및 바이트 배열 방법.

선택적 소스 매개 변수를 사용하여 몇 가지 다른 방법으로 배열을 초기화 할 수 있습니다.

문자열 인 경우 인코딩 (및 선택적으로 오류) 매개 변수도 제공해야합니다. 그런 다음 bytearray ()는 str.encode ()를 사용하여 문자열을 바이트로 변환합니다.

정수인 경우 배열은 해당 크기를 가지며 널 바이트로 초기화됩니다.

버퍼 인터페이스를 준수하는 객체 인 경우 객체의 읽기 전용 버퍼가 바이트 배열을 초기화하는 데 사용됩니다.

반복 가능한 경우 배열의 초기 내용으로 사용되는 0 <= x <256 범위의 정수 반복 가능이어야합니다.

인수가 없으면 크기 0의 배열이 생성됩니다.

따라서 bytes 는 문자열을 인코딩하는 것 이상을 할 수 있습니다. 의미있는 모든 유형의 소스 매개 변수로 생성자를 호출 할 수 있다는 점은 Pythonic입니다.

문자열을 인코딩하는 경우 some_string.encode(encoding) 이 생성자를 사용하는 것보다 더 파이썬 적이라고 생각합니다. 왜냐하면 가장 자체 문서화이기 때문입니다. "이 문자열을 bytes(some_string, encoding) -생성자를 사용할 때 명시적인 동사가 없습니다.

편집 : Python 소스를 확인했습니다. CPython을 사용하여 유니 코드 문자열을 bytes encode 의 구현 인 PyUnicode_AsEncodedString 을 호출합니다. encode 직접 호출하면 간접적 인 수준을 건너 뛰는 것입니다.

또한 Serdalis의 주석을 참조하십시오-unicode_string.encode unicode_string.encode(encoding) 은 역이 byte_string.decode(encoding) 이고 대칭이 좋기 때문에 더 Pythonic입니다.

출처 : https://stackoverflow.com/questions/7585435/best-way-to-convert-string-to-bytes-in-python-3
728x90
반응형