Python3의 가장 중요한 개선 사항 중 하나는 Python2에서 문자열과 문자 인코딩이 남긴 큰 문제를 해결한 것입니다. Python 코딩이 왜 그렇게 고통스럽습니까? Python2의 문자열 디자인에 몇 가지 결함이 도입되었습니다.
- ASCII 코드를 기본 인코딩 방법으로 사용하는 것은 중국어 처리에 매우 비우호적입니다.
- 문자열을 강제로 유니코드와 문자열의 두 가지 유형으로 나누는 것은 개발자를 오해하게 만듭니다
물론 처리에 좀 더 주의를 기울이면 이러한 함정을 피할 수 있습니다. 그러나 Python3에서는 두 문제 모두 매우 잘 해결되었습니다.
먼저 Python3은 시스템 기본 인코딩을 UTF-8로 설정합니다
>>> import sys >>> sys.getdefaultencoding() 'utf-8' >>>
그런 다음 텍스트 문자와 바이너리 데이터가 각각 str과 바이트로 표시되어 더욱 명확하게 구분됩니다. 모든 텍스트 문자는 str 유형으로 표시됩니다. str은 유니코드 문자 세트 의 모든 문자를 나타낼 수 있는 반면, 이진 바이트 데이터는 바이트로 표시되는 새로운 데이터 유형 으로 표시됩니다.
str
>>> a = "a" >>> a 'a' >>> type(a) <class 'str'> >>> b = "禅" >>> b '禅' >>> type(b) <class 'str'>
bytes
Python3에서 문자 따옴표 앞에 'b'를 추가하면 이것이 바이트 유형 객체임을 명확히 나타냅니다. 사실, 일련의 이진 바이트로 구성된 데이터 집합입니다. 바이트 유형은 ASCII 범위의 문자 및 기타 16진수 형식의 문자 데이터일 수 있지만 중국어와 같은 비ASCII 문자로는 표현할 수 없습니다.
>>> c = b'a'>>> c b'a'>>> type(c) <class 'bytes'> >>> d = b'\xe7\xa6\x85'>>> d b'\xe7\xa6\x85'>>> type(d) <class 'bytes'> >>> >>> e = b'禅' File "<stdin>", line 1SyntaxError: bytes can only contain ASCII literal characters.
bytes 유형은 str과 동일한 작업을 제공하여 샤딩, 인덱싱 및 기본 수치 연산과 같은 작업을 지원합니다. 그러나 py2에서는 가능하지만 str 및 bytes 유형의 데이터에는 + 연산을 수행할 수 없습니다.
>>> b"a"+b"c" b'ac' >>> b"a"*2 b'aa' >>> b"abcdef\xd6"[1:] b'bcdef\xd6' >>> b"abcdef\xd6"[-1] 214 >>> b"a" + "b" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to str
인코드 및 디코드
str과 바이트 간의 변환은 encode 및 decode 메서드를 사용하여 수행할 수 있습니다.
encode는 문자-바이트 인코딩 변환을 담당합니다. 기본적으로 UTF-8 인코딩이 사용됩니다.
>>> s = "Python之禅" >>> s.encode() b'Python\xe4\xb9\x8b\xe7\xa6\x85' >>> s.encode("gbk") b'Python\xd6\xae\xec\xf8'
decode는 바이트를 문자로 디코딩하고 변환하는 작업을 담당하며 일반적으로 변환을 위해 UTF-8 인코딩 형식을 사용합니다.
아아아아위 내용은 어려운 문자 인코딩 문제에 대한 Python3의 솔루션에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!