Windows 8'de CMD'deyim ve kod sayfasını 65001 (chcp 65001
) olarak ayarlıyorum. Python 2.7.2 (ActivePython 2.7.2.5) kullanıyorum ve PYTHONSTARTUP ortam değişkenini "bootstrap.py" ye ayarlıyorum.Unicode'u CMD'ye yazarken neden IOError'ları alıyorum? (Kod sayfası 65001 ile)
bootstrap.py: Bu bana baskı ASCII sağlar
import codecs
codecs.register(
lambda name: name == 'cp65001' and codecs.lookup('UTF-8') or None
)
:
>>> print 'hello'
hello
>>> print u'hello'
hello
Ama ASCII olmayan karakterler içeren bir Unicode dizesi yazdırmaya çalıştığımda olsun hataları hayır yapar bana hisset. Eğer her zaman bir hata zam yok (ve hatta yükseltmek değil Gördüğünüz gibi
>>> print u'æøå'
��øåTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory
>>> print u'åndalsnes'
��ndalsnes
>>> print u'åndalsnesæ'
��ndalsnesæTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
>>> print u'Øst'
��st
>>> print u'uØst'
uØstTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
>>> print u'ØstÆØÅæøå'
��stÆØÅæøåTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
>>> print u'_ØstÆØÅæøå'
_ØstÆØÅæøåTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
: İşte İskandinav sembolleri içeren birkaç dizeleri yazdırmak için deneyin (Ben okunabilmesi için baskılar arasında fazladan satır sonu eklendi) her seferinde aynı hata) ve İskandinav sembolleri sadece bazen doğru şekilde görüntülenir.
Birisi bu davranışı açıklayabilir mi, yoksa en azından Unicode'un CMD'ye nasıl yazdırılacağını bulmama yardımcı olabilir mi?
Bu bir kabus durumudur. Ve burada SO ve başka yerlerde bir gazilyon kez tartışıldı. Örneğin: http://www.google.com/search?q=print+unicode+windows+console+python –
Yapabilecekleriniz varsa, en basit çözüm Python 3,3'ü kullanmaktır. Bu bir [cp65001 codec] 'dir (http://docs.python.org/3/whatsnew/3.3.html#codecs). – eryksun
@PiotrDobrogost: Eğer bulamıyorsanız lütfen bana başka bir davayla bakın (ve ** ** Unicode kod çözme hataları anlamına gelmez!) – Hubro