Saat menyalurkan output dari program Python, juru bahasa Python menjadi bingung tentang penyandian dan mengaturnya ke None. Ini berarti program seperti ini:
# -*- coding: utf-8 -*-
print u"åäö"
akan berfungsi dengan baik saat dijalankan secara normal, tetapi gagal dengan:
UnicodeEncodeError: 'ascii' codec tidak dapat menyandikan karakter u '\ xa0' di posisi 0: ordinal tidak dalam jangkauan (128)
bila digunakan dalam urutan pipa.
Apa cara terbaik untuk membuat ini berfungsi saat pemipaan? Bisakah saya katakan saja untuk menggunakan pengkodean apa pun shell / filesystem / apa pun yang menggunakan?
Saran yang saya lihat sejauh ini adalah untuk memodifikasi situs Anda.py secara langsung, atau hardcoding defaultencoding menggunakan hack ini:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print u"åäö"
Apakah ada cara yang lebih baik untuk membuat perpipaan bekerja?
chcp 65001
sebelum menjalankan skrip Anda. Ini dapat memiliki masalah, tetapi seringkali membantu, dan tidak memerlukan banyak pengetikan (kurang dari set PYTHONIOENCODING=utf_8
).
setx PYTHONENCODING utf-8
membuatnya permanen jika Anda ingin menyimpan pengetikan.