При передаче вывода программы Python интерпретатор Python запутывается в кодировании и устанавливает для него значение None. Это означает такую программу:
# -*- coding: utf-8 -*-
print u"åäö"
будет нормально работать при нормальной работе, но не с:
UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ xa0' в позиции 0: порядковый номер не в диапазоне (128)
при использовании в последовательности труб.
Каков наилучший способ сделать эту работу при обвязке? Могу ли я просто сказать ему использовать любую кодировку оболочки / файловой системы / что бы она ни использовала?
Советы, которые я видел до сих пор, это изменить ваш site.py напрямую или жестко закодировать код по умолчанию с помощью этого хака:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print u"åäö"
Есть ли лучший способ заставить трубопровод работать?
chcp 65001
перед выполнением сценария. Это может иметь проблемы, но это часто помогает, и не требует большого набора текста (меньше, чем set PYTHONIOENCODING=utf_8
).
setx PYTHONENCODING utf-8
сделать его постоянным, если вы хотите сохранить набор текста.