복붙노트

[PYTHON] 문자열과 바이트 문자열의 차이점은 무엇입니까?

PYTHON

문자열과 바이트 문자열의 차이점은 무엇입니까?

바이트 문자열을 반환하는 라이브러리와 함께 일하고 있는데 문자열로 변환해야합니다.

차이점이 무엇인지는 확실하지 않지만 (있는 경우).

해결법

  1. ==============================

    1.파이썬 3 (파이썬 2에서는이 차이가 덜 잘 정의되어있다)을 가정하자. 문자열은 일련의 문자, 즉 유니 코드 코드 포인트이다. 이들은 추상적 인 개념이며 디스크에 직접 저장할 수 없습니다. 바이트 문자열은 당연히 바이트의 시퀀스로, 디스크에 저장할 수 있습니다. 그들 사이의 매핑은 인코딩입니다 - 꽤 많이 있습니다 (그리고 무한히 많은 것들이 가능합니다). 다른 인코딩은 같은 바이트를 매핑 할 수 있기 때문에 변환을 수행하기 위해 어떤 경우에 적용 할 것인지를 알아야합니다 다른 문자열로 :

    파이썬 3 (파이썬 2에서는이 차이가 덜 잘 정의되어있다)을 가정하자. 문자열은 일련의 문자, 즉 유니 코드 코드 포인트이다. 이들은 추상적 인 개념이며 디스크에 직접 저장할 수 없습니다. 바이트 문자열은 당연히 바이트의 시퀀스로, 디스크에 저장할 수 있습니다. 그들 사이의 매핑은 인코딩입니다 - 꽤 많이 있습니다 (그리고 무한히 많은 것들이 가능합니다). 다른 인코딩은 같은 바이트를 매핑 할 수 있기 때문에 변환을 수행하기 위해 어떤 경우에 적용 할 것인지를 알아야합니다 다른 문자열로 :

    >>> b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'.decode('utf-16')
    '蓏콯캁澽苏'
    >>> b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'.decode('utf-8')
    'τoρνoς'
    

    사용할 문자열이 무엇인지 알았 으면 바이트 문자열의 .decode () 메서드를 사용하여 위와 같이 올바른 문자열을 가져올 수 있습니다. 완성을 위해 문자열의 .encode () 메소드는 반대 방향으로 진행됩니다.

    >>> 'τoρνoς'.encode('utf-8')
    b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'
    
  2. ==============================

    2.컴퓨터가 저장할 수있는 유일한 것은 바이트입니다.

    컴퓨터가 저장할 수있는 유일한 것은 바이트입니다.

    컴퓨터에 무엇이든 저장하려면 먼저 인코딩해야합니다 (예 : 바이트로 변환). 예 :

    MP3, WAV, PNG, JPEG, ASCII 및 UTF-8이 인코딩의 예입니다. 인코딩은 오디오, 이미지, 텍스트 등을 바이트로 나타내는 형식입니다.

    파이썬에서 바이트 문자열은 바이트 시퀀스입니다. 그것은 인간이 읽을 수있는 것이 아닙니다. 내부적으로 모든 것을 바이트 문자열로 변환해야 컴퓨터에 저장 될 수 있습니다.

    반면에 "문자열"이라고도 불리는 문자열은 일련의 문자입니다. 그것은 인간이 읽을 수있는 것입니다. 문자열은 컴퓨터에 직접 저장할 수 없으므로 먼저 인코딩 (바이트 문자열로 변환)해야합니다. 문자열을 ASCII 및 UTF-8과 같은 바이트 문자열로 변환 할 수있는 여러 인코딩이 있습니다.

    'I am a string'.encode('ASCII')
    

    위의 파이썬 코드는 인코딩 ASCII를 사용하여 'I am a string'문자열을 인코딩합니다. 위 코드의 결과는 바이트 문자열이됩니다. 인쇄하면 파이썬은 b'I a string '으로 표시합니다. 그러나 바이트 문자열은 사람이 읽을 수있는 문자열이 아니라는 것을 기억하십시오. 파이썬이 인쇄 할 때 ASCII에서 디코딩하는 것입니다. 파이썬에서 바이트 스트링은 b로 표시되고 바이트 스트링의 ASCII 표현이 뒤 따른다.

    바이트 문자열은 인코딩하는 데 사용 된 인코딩을 알고있는 경우 문자열로 다시 디코딩 할 수 있습니다.

    b'I am a string'.decode('ASCII')
    

    위의 코드는 원래 문자열 'I am a string'을 반환합니다.

    인코딩 및 디코딩은 역 연산입니다. 모든 것은 디스크에 기록되기 전에 인코딩되어야하며, 인간이 읽을 수 있으려면 먼저 디코딩해야합니다.

  3. ==============================

    3.파이썬 2에서 str은 8 비트 값의 시퀀스로 구성되며 유니 코드는 유니 코드 문자의 시퀀스로 구성됩니다. 한 가지 명심해야 할 점은 str이 7 비트 ASCI 문자로만 구성된 경우 str과 unicode를 연산자와 함께 사용할 수 있다는 것입니다.

    파이썬 2에서 str은 8 비트 값의 시퀀스로 구성되며 유니 코드는 유니 코드 문자의 시퀀스로 구성됩니다. 한 가지 명심해야 할 점은 str이 7 비트 ASCI 문자로만 구성된 경우 str과 unicode를 연산자와 함께 사용할 수 있다는 것입니다.

    파이썬 3에서 바이트는 8 비트 값의 시퀀스로 구성되며 str은 유니 코드 문자의 시퀀스로 구성됩니다. 바이트 및 strcnot은> 또는 +와 같은 연산자와 함께 사용할 수 없습니다.

    Python 2에서는 str과 unicode를, Python 3에서는 bytes와 str을 변환하는 헬퍼 함수를 ​​사용하는 것이 유용 할 수 있습니다.

  4. ==============================

    4.유니 코드 란 무엇입니까?

    유니 코드 란 무엇입니까?

    따라서 컴퓨터가 문자열을 나타낼 때 문자열의 컴퓨터에 저장된 고유 한 유니 코드 번호를 통해 문자를 찾으면 이러한 숫자가 메모리에 저장됩니다. 그러나 문자열을 디스크에 직접 쓰거나 문자열을 고유 한 유니 코드 번호로 네트워크에 전송할 수는 없습니다.이 숫자는 단순한 십진수이기 때문입니다. 문자열을 UTF-8과 같은 바이트 문자열로 인코딩해야합니다. UTF-8은 가능한 모든 문자를 인코딩 할 수있는 문자 인코딩이며 문자를 바이트로 저장합니다 (이 모양). 따라서 인코딩 된 문자열은 UTF-8이 거의 모든 곳에서 지원되기 때문에 어디서나 사용할 수 있습니다. 다른 시스템에서 UTF-8로 인코딩 된 텍스트 파일을 열면 컴퓨터가이를 디코드하여 유니 코드 고유 번호를 통해 문자를 표시합니다. 브라우저가 네트워크에서 UTF-8로 인코딩 된 문자열 데이터를 수신하면 데이터를 문자열로 디코드하고 (브라우저에서 UTF-8 인코딩으로 가정) 문자열을 표시합니다.

    python3에서는 문자열과 바이트 문자열을 서로 변환 할 수 있습니다.

    >>> print('中文'.encode('utf-8'))
    b'\xe4\xb8\xad\xe6\x96\x87'
    >>> print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))
    中文 
    

    한마디로 문자열은 사람에게 컴퓨터에서 읽을 것을 표시하기위한 것이며 바이트 문자열은 디스크 및 데이터 전송에 저장하기위한 것입니다.

  5. from https://stackoverflow.com/questions/6224052/what-is-the-difference-between-a-string-and-a-byte-string by cc-by-sa and MIT license