Güncelleştirme: Python 3.6 PEP 528 uygular : Windows konsol kodlamasını UTF-8 olarak değiştirin : Windows'daki varsayılan konsol artık tüm Unicode karakterlerini kabul edecektir. Dahili olarak , win-unicode-console
aşağıda belirtilen paketle aynı Unicode API'sını kullanır . print(unicode_string)
şimdi çalışmalı.
Bir UnicodeEncodeError: 'charmap' codec can't encode character...
hata alıyorum.
Hata, yazdırmaya çalıştığınız Unicode karakterlerin geçerli ( chcp
) konsol karakter kodlaması kullanılarak temsil edilemeyeceği anlamına gelir . cp437
Kod sayfası genellikle ~ 1M Unicode karakterlerden yalnızca ~ 0x100 karakterleri temsil edebilen 8 bit kodlamadır :
>>> u "\ N {EURO SIGN}". kodlama ('cp437')
Geri izleme (en son son arama):
...
UnicodeEncodeError: 'charmap' codec bileşeni '\ u20ac' karakterini 0 konumunda kodlayamıyor:
karakter eşleşir
Bunun Windows konsolu yalnızca Unicode karakterleri kabul etmediği için varsayıyorum. Bunun en iyi yolu nedir?
Windows konsolu Unicode karakterleri kabul eder ve karşılık gelen yazı tipi yapılandırılmışsa bunları (yalnızca BMP) görüntüleyebilir . @Daira Hopwood'un cevabındaWriteConsoleW()
önerildiği gibi API kullanılmalıdır . Saydam olarak çağrılabilir, yani paket kullanıyorsanız komut dosyalarınızı değiştirmeniz gerekmez ve değiştirmeniz gerekmez :win-unicode-console
T:\> py -mpip install win-unicode-console
T:\> py -mrun your_script.py
Bkz. Python 3.4, Unicode, farklı diller ve Windows ile anlaşma nedir?
Python'un ?
bu durumda başarısız olmak yerine otomatik olarak yazdırmasını sağlamanın herhangi bir yolu var mı ?
O bütün unencodable karakterleri değiştirmek için yeterliyse ?
sizin durumda o zaman ayarlayabilirsiniz PYTHONIOENCODING
envvar :
T:\> set PYTHONIOENCODING=:replace
T:\> python3 -c "print(u'[\N{EURO SIGN}]')"
[?]
Python 3.6+ PYTHONIOENCODING
sürümünde, PYTHONLEGACYWINDOWSIOENCODING
envvar boş olmayan bir dizeye ayarlanmadığı sürece envvar tarafından belirtilen kodlama etkileşimli konsol arabellekleri için yok sayılır .