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)
≥
>>>
답변
unicode
unicode
형식 문자열이 필요 합니다.
>>> print u'{0}'.format(s)
≥
답변
왜 그런지에 대한 정보가 조금 더 있습니다.
>>> s = u'\u2265'
>>> print s
print
UTF-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 )