문자열과 바이트 문자열의 차이점은 무엇입니까?
바이트 문자열을 반환하는 라이브러리로 작업 중이며 이것을 문자열로 변환해야합니다.
차이가 무엇인지 확실하지 않지만-있다면.
파이썬 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'
컴퓨터가 저장할 수있는 유일한 것은 바이트입니다.
컴퓨터에 무엇이든 저장하려면 먼저 인코딩 해야합니다 ( 예 : 바이트로 변환). 예를 들면 다음과 같습니다.
- 음악을 저장하려면, 먼저 있어야 인코딩 사용하여
MP3
,WAV
등 - 당신이 사진을 저장하려면, 먼저 있어야 인코딩 사용하여
PNG
,JPEG
등 - 텍스트를 저장하려면, 먼저 있어야 인코딩 사용하여
ASCII
,UTF-8
등
MP3
, WAV
, PNG
, JPEG
, ASCII
및 UTF-8
의 예 인코딩 . 인코딩은 오디오, 이미지, 텍스트 등을 바이트 단위로 나타내는 형식입니다.
파이썬에서 바이트 문자열은 바이트 시퀀스입니다. 사람이 읽을 수 없습니다. 후드 아래에서 모든 것을 바이트 문자열로 변환해야 컴퓨터에 저장할 수 있습니다.
반면에 종종 "문자열"이라고하는 문자열은 일련의 문자입니다. 사람이 읽을 수 있습니다. 문자열은 컴퓨터에 직접 저장할 수 없으며 먼저 인코딩 해야합니다 (바이트 문자열로 변환). 문자열을 ASCII
and와 같은 바이트 문자열로 변환 할 수있는 여러 인코딩이 있습니다 UTF-8
.
'I am a string'.encode('ASCII')
위의 Python 코드는 encoding을 사용하여 문자열 'I am a string'
을 인코딩 ASCII
합니다. 위 코드의 결과는 바이트 문자열입니다. 그것을 인쇄하면 파이썬은 그것을로 표시합니다 b'I am a string'
. 그러나 바이트 문자열 은 사람이 읽을 수 없으며ASCII
인쇄 할 때 파이썬이 디코딩한다는 것만 기억하십시오 . Python에서 바이트 문자열은로 표시되고 b
그 뒤에 바이트 문자열이 ASCII
표시됩니다.
인코딩에 사용 된 인코딩을 알고 있으면 바이트 문자열을 문자열 로 다시 디코딩 할 수 있습니다 .
b'I am a string'.decode('ASCII')
위의 코드는 원래 문자열을 반환합니다 'I am a string'
.
인코딩 및 디코딩은 역 연산입니다. 디스크에 쓰기 전에 모든 것을 인코딩해야하며, 사람이 읽을 수 있으려면 먼저 디코딩해야합니다.
Python 2 에서 str
8 비트 값 unicode
시퀀스로 구성되는 반면 유니 코드 문자 시퀀스로 구성됩니다. 한 가지 유념해야 할 점은 인 str
하고 unicode
있는 경우 사업자와 함께 사용할 수있는 str
단지는 7 비트 ASCI 문자로 구성되어 있습니다.
파이썬 3에서 , bytes
동안, 8 비트 값의 시퀀스로 구성되어 str
유니 코드 문자의 시퀀스로 구성되어 있습니다. bytes
와 str
같은 통신 사업자와 함께 사용할 수 없습니다 >
나 +
.
사이의 변환 도우미 기능을 사용하는 것이 유용 할 수 있습니다 str
및 unicode
파이썬 2, 사이 bytes
와 str
파이썬 3.
에서 유니 코드 무엇입니까 :
기본적으로 컴퓨터는 숫자 만 처리합니다. 문자와 기타 문자를 각각 번호를 지정하여 저장합니다.
......
유니 코드는 플랫폼, 프로그램, 언어 및 언어에 관계없이 모든 문자에 고유 한 번호를 제공합니다.
따라서 컴퓨터가 문자열을 나타내는 경우 고유 한 유니 코드 번호를 통해 문자열의 컴퓨터에 저장된 문자를 찾고이 숫자는 메모리에 저장됩니다. 그러나 문자열은 디스크에 직접 쓰거나 고유 한 유니 코드 번호를 통해 네트워크에서 문자열을 전송할 수 없습니다.이 숫자는 단순한 십진수입니다. 문자열을와 같은 바이트 문자열로 인코딩해야합니다 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'))
中文
한마디로, 문자열은 사람이 컴퓨터에서 읽을 수 있도록 표시하기위한 것이고 바이트 문자열은 디스크와 데이터 전송에 저장하기위한 것입니다.
유니 코드는 문자 및 다양한 형식의 형식 (예 : 소문자 / 대문자, 줄 바꿈, 캐리지 리턴) 및 기타 "사물"(예 : 이모 지)의 이진 표현을 위해 합의 된 형식입니다. 컴퓨터는 ASCII 표현 (다른 일련의 비트) 또는 다른 표현 (비트 계열)을 저장하는 것보다 메모리 또는 파일에 상관없이 유니 코드 표현 (일련의 비트)을 저장할 수 없습니다. ).
들어 통신이 자리를 차지할, 통신의 당사자가 사용됩니다 어떤 표현에 동의해야합니다.
Because unicode seeks to represent all the possible characters (and other "things") used in inter-human and inter-computer communication, it requires a greater number of bits for the representation of many characters (or things) than other systems of representation that seek to represent a more limited set of characters/things. To "simplify," and perhaps to accommodate historical usage, unicode representation is almost exclusively converted to some other system of representation (e.g. ascii) for the purpose of storing characters in files.
It is not the case that unicode cannot be used for storing characters in files, or transmitting them through any communications channel, simply that it is not.
The term "string," is not precisely defined. "String," in its common usage, refers to a set of characters/things. In a computer, those characters may be stored in any one of many different bit-by-bit representations. A "byte string" is a set of characters stored using a representation that uses eight bits (eight bits being referred to as a byte). Since, these days, computers use the unicode system (characters represented by a variable number of bytes) to store characters in memory, and byte strings (characters represented by single bytes) to store characters to files, a conversion must be used before characters represented in memory will be moved into storage in files.
'Programming' 카테고리의 다른 글
친숙한 XML 문자열을 인쇄하도록 XML 문자열 형식화 (0) | 2020.06.01 |
---|---|
INSTALL_FAILED_TEST_ONLY로 ADB 설치가 실패 함 (0) | 2020.06.01 |
두 단어 문자열에서 두 단어의 첫 글자를 대문자로 (0) | 2020.06.01 |
여러 개의 컬러 텍스트가있는 단일 TextView (0) | 2020.06.01 |
Groovy / grails 데이터 유형을 결정하는 방법은 무엇입니까? (0) | 2020.05.29 |