[python] Python : 유니 코드 이스케이프 된 문자열에서 .format () 사용

Python 2.6.5를 사용하고 있습니다. 내 코드에는 “이상”기호를 사용해야합니다. 여기 간다:

>>> s = u'\u2265'
>>> print s
>>> 
>>> print "{0}".format(s)
Traceback (most recent call last):
     File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265'
  in position 0: ordinal not in range(128)`  

이 오류가 발생하는 이유는 무엇입니까? 올바른 방법이 있습니까? 이 .format()기능 을 사용해야합니다 .



답변

두 번째 문자열을 유니 코드 문자열로 만드십시오.

>>> s = u'\u2265'
>>> print s

>>> print "{0}".format(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265' in position 0: ordinal not in range(128)
>>> print u"{0}".format(s)
≥
>>> 


답변

unicodeunicode형식 문자열이 필요 합니다.

>>> print u'{0}'.format(s)


답변

왜 그런지에 대한 정보가 조금 더 있습니다.

>>> s = u'\u2265'
>>> print s

printUTF-8로 설정된 환경에 자동으로 시스템 인코딩을 사용 하기 때문에 작동합니다 . (을 통해 확인할 수 있습니다 import sys; print sys.stdout.encoding)

>>> print "{0}".format(s)

format호출 된 유형의 인코딩과 일치하려고 시도하기 때문에 실패합니다 (이 문서에 대한 문서를 찾을 수는 없지만 이것이 주목 한 동작입니다). 문자열 리터럴은 파이썬 2에서 ASCII로 인코딩 된 바이트 문자열이므로 ASCII format로 인코딩 s을 시도하면 예외가 발생합니다. 관찰 :

>>> s = u'\u2265'
>>> s.encode('ascii')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265' in position 0: ordinal not in range(128)

이것이 기본적으로 이러한 접근 방식이 작동하는 이유입니다.

>>> s = u'\u2265'
>>> print u'{}'.format(s)

>>> print '{}'.format(s.encode('utf-8'))

소스 문자 세트는 인코딩 선언으로 정의됩니다. 소스 파일에 인코딩 선언이없는 경우 ASCII입니다 ( https://docs.python.org/2/reference/lexical_analysis.html#string-literals )


답변