2009-10-09 3 views
4

저는 기초로 돌아가서 좌절하는 인코딩 문제를 해결하려고 노력하고 있습니다. 파이썬의 인쇄 기능은 다이브로 파이썬이 작성되었을 때보 다 유니 코드를 다르게 처리합니까?

>>> s = u'La Pe\xf1a' 
>>> print s 
Traceback (innermost last): File "<interactive input>", line 1, in ? 
UnicodeError: ASCII encoding error: ordinal not in range(128) 
>>> print s.encode('latin-1') 
La Peña 

하지만 내 컴퓨터에

은, 이런 :이 다른 이유

>>> sys.getdefaultencoding() 
'ascii' 
>>> s = u'La Pe\xf1a' 
>>> print s 
La Peña 

이해가 안 다이브 속으로 파이썬 예 9.14 (here)에서 우리는이 있습니다. 아무도?

답변

6

print의 기본 인코딩은 이 아니라 sys.stdout.encoding입니다. 예를 들어 파이썬을 시작하면 LANG=C 또는 python 스크립트를 파일로 리디렉션하면 stdout의 인코딩은 ANSI_X3.4-1968이됩니다. 반면에 sys.stdout이 터미널이면 터미널의 인코딩을 사용합니다.

sys.getdefaultencoding()이 무엇인지 설명하려면 - 문자열을 암시 적으로 /로부터 유니 코드로 변환 할 때 사용됩니다. 이 예에서 기본 ASCII 인코딩을 사용하는 str(u'La Pe\xf1a')은 실패하지만 수정 된 기본 인코딩을 사용하면 문자열을 Latin-1로 인코딩합니다. 그러나 기본 인코딩을 설정하는 것은 끔찍한 생각이므로 unicode에서 str으로 이동하려면 항상 명시 적 인코딩을 사용해야합니다.