>  기사  >  백엔드 개발  >  어려운 문자 인코딩 문제에 대한 Python3의 솔루션에 대한 자세한 설명

어려운 문자 인코딩 문제에 대한 Python3의 솔루션에 대한 자세한 설명

PHPz
PHPz원래의
2017-04-02 13:23:491540검색

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 &#39;str&#39;>
>>> b = "禅"
>>> b
&#39;禅&#39;
>>> type(b)
<class &#39;str&#39;>

bytes

Python3에서 문자 따옴표 앞에 'b'를 추가하면 이것이 바이트 유형 객체임을 명확히 나타냅니다. 사실, 일련의 이진 바이트로 구성된 데이터 집합입니다. 바이트 유형은 ASCII 범위의 문자 및 기타 16진수 형식의 문자 데이터일 수 있지만 중국어와 같은 비ASCII 문자로는 표현할 수 없습니다.

>>> c = b&#39;a&#39;>>> c
b&#39;a&#39;>>> type(c)
<class &#39;bytes&#39;>

>>> d = b&#39;\xe7\xa6\x85&#39;>>> d
b&#39;\xe7\xa6\x85&#39;>>> type(d)
<class &#39;bytes&#39;>
>>>

>>> e = b&#39;禅&#39;
  File "<stdin>", line 1SyntaxError: bytes can only contain ASCII literal characters.

bytes 유형은 str과 동일한 작업을 제공하여 샤딩, 인덱싱 및 기본 수치 연산과 같은 작업을 지원합니다. 그러나 py2에서는 가능하지만 str 및 bytes 유형의 데이터에는 + 연산을 수행할 수 없습니다.

>>> b"a"+b"c"
b&#39;ac&#39;
>>> b"a"*2
b&#39;aa&#39;
>>> b"abcdef\xd6"[1:]
b&#39;bcdef\xd6&#39;
>>> b"abcdef\xd6"[-1]
214
>>> b"a" + "b"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can&#39;t concat bytes to str

인코드 및 디코드

str과 바이트 간의 변환은 encode 및 decode 메서드를 사용하여 수행할 수 있습니다.

encode는 문자-바이트 인코딩 변환을 담당합니다. 기본적으로 UTF-8 인코딩이 사용됩니다.

>>> s = "Python之禅"
>>> s.encode()
b&#39;Python\xe4\xb9\x8b\xe7\xa6\x85&#39;
>>> s.encode("gbk")
b&#39;Python\xd6\xae\xec\xf8&#39;

decode는 바이트를 문자로 디코딩하고 변환하는 작업을 담당하며 일반적으로 변환을 위해 UTF-8 인코딩 형식을 사용합니다.

아아아아

위 내용은 어려운 문자 인코딩 문제에 대한 Python3의 솔루션에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.