2016-07-01 3 views
0

필자가 아는 한 파이썬에서 문자열과 유니 코드 문자열의 차이점이있다. 하지만 문자열 객체가 생성 될 때마다 파이썬이 일반 객체 대신 유니 코드 문자열을 사용하도록 지시 할 수 있습니까?일반 문자열 대신 유니 코드 문자열을 사용 하시겠습니까? (Python 2.7)

그래서 텍스트 입력을받을 때 unicode()을 사용할 필요가 없습니까?

내가 게으른 들릴 수도 있지만이 가능한 경우 단지 관심 ...

추신 나는 문자 인코딩에 대해 많이 모른다. 그래서 내가 틀린 것이 있으면 나를 바로 잡아라.

+3

예, 단순히 파이썬 3을 사용하십시오. 유니 코드가 아닌 문자열은 없습니다. –

+0

하지만 파이썬 2를 선호한다면? – Cosinux

+1

@Cosinux. 실제로 파이썬 3을 사용 했습니까? 그렇다면 파이썬 2를 선호하게 만들면서 어떤 문제를 겪었습니까? – ekhumoro

답변

0

그러나 문자열 개체가 생성 될 때마다 일반 코드 대신 유니 코드 문자열을 사용하도록 Python에 지시 할 수 있습니까?

파이썬에는 파이썬 2와 3에서 두 가지 유형의 문자열, 즉 바이트 순서 (바이트 시퀀스)와 유니 코드 문자열 (유니 코드 코드 시퀀스)이 있습니다.

bytestring = b'abc' 
unicode_text = u'abc' 

문자열의 유형은 문자 그대로의 파이썬 버전과 from __future__ import unicode_literals 수입의 존재에 따라 'abc' 문자열을 사용하여 만들었습니다. 파이썬 2에서 가져 오기가 없다면 'abc' 리터럴은 바이트 검사를 만들고, 그렇지 않으면 유니 코드 문자열을 만듭니다.

예 : # -*- coding: utf-8 -*-과 같이 문자열 리터럴에 아스키가 아닌 문자를 사용하는 경우 Python 소스 파일 맨 위에 인코딩 선언을 추가하십시오.

그래서 텍스트 입력을받을 때 unicode()를 사용할 필요가 없습니까?

"텍스트 입력"은 프로그램이 (파일, 네트워크, 명령 줄에서) 어떻게 든 바이트를 받았다면 다음을 의미합니다 : 파이썬을 사용하여 바이트를 암시 적으로 유니 코드로 변환하지 말아야합니다 - - unicode_text = bytestring.decode(character_encoding)을 사용하여 바이트를 수신하자마자 명시 적으로 처리해야합니다.

역순으로 텍스트를 프로그램 내에 유니 코드로 유지하십시오. 가능한 경우 유니 코드 문자열을 바이트로 변환하십시오 (예 : 네트워크를 통해 텍스트를 전송하는 경우).

바이너리 데이터로 작업하기 위해 bytestrings을 사용하십시오 : 이미지, 압축 된 내용 등. 유니 코드 문자열을 사용하여 파이썬에서 텍스트로 작업하십시오.

파일에서 유니 코드를 읽으려면 use io.open() (올바른 문자 인코딩을 알고 있어야합니다 (locale.getpreferredencoding(False)이 아닌 경우).

당신이 네트워크를 통해 유니 코드 텍스트가 해당 프로토콜의 예에 따라 달라질 수 있습니다받을 때 어떤 문자 인코딩을 사용하는, the charset can be specified in Content-Type http header :

text = data.decode(response.headers.getparam('charset')) 

당신은 universal_newlines=True 또는 io.TextIOWrapper()이 외부 프로세스에서 시작하여 유니 코드 텍스트를 얻을하는 데 사용할 수있는 subprocess 모듈. Windows에서 어떤 문자 인코딩을 사용해야 하는지를 알아내는 것은 쉽지 않습니다 (러시아어를 읽는 경우 여기에서 자세한 내용 참조 : Byte при печати вывода внешней команды).

1

파이썬 2.6+에서는 from __future__ import unicode_literals을 사용할 수 있지만 그것은 문자열 리터럴 유니 코드로 만든다. 바이트 문자열을 반환 한 모든 함수는 여전히 바이트 문자열을 반환합니다.

예 : 사용자가 원하는 동작을 위해

>>> s = 'abc' 
>>> type(s) 
<type 'str'> 
>>> from __future__ import unicode_literals 
>>> s = 'abc' 
>>> type(s) 
<type 'unicode'> 

사용 파이썬 3

2

예를 들어 (GUI 셸에서 pyhon 상호 작용, DIFF에서) : 한마디로

>>> s = '你好' 
>>> s 
'\xe4\xbd\xa0\xe5\xa5\xbd' 
>>> us = u'你好' 
>>> us 
u'\u4f60\u597d' 
>>> print type(s) 
<type 'str'> 
>>> print type(us) 
<type 'unicode'> 
>>> len(s) 
6 
>>> len(us) 
2 

:
먼저 문자열 개체는 문자 시퀀스이고 유니 코드 문자열은 0에서 0x10ffff까지의 숫자 인 코드 포인트 시퀀스 (유니 코드 코드 단위)입니다. len (string)은 바이트 집합을 반환하며 len (unicode)은 여러 문자를 반환합니다.이 시퀀스는 메모리에서 바이트 집합 (0-255의 의미)으로 표현되어야합니다. 유니 코드 문자열을 바이트 시퀀스로 변환하는 규칙을 인코딩이라고합니다.
bytestring을 원한다면 raw_input을 대신 입력해야한다고 생각합니다.

관련 문제