На самом деле это проблема Jython:
В PySystemState.java при настройке кодировок Jython пропускает настройку любой кодировки, если это не консоль tty:
private void initEncoding() {
String encoding = registry.getProperty(PYTHON_CONSOLE_ENCODING);
if (encoding == null) {
return;
}
for (PyFile stdStream : new PyFile[] {(PyFile)this.stdin, (PyFile)this.stdout,
(PyFile)this.stderr}) {
if (stdStream.isatty()) {
stdStream.encoding = encoding;
}
}
}
Итак,Обходным решением может быть создание Java-модуля для его установки (поскольку кодировка является открытым полем PyFile, но не имеет установщика со стороны Jython - или вы можете использовать Java-отражение, чтобы установить его) ...
Может быть, вы могли бы спросить ребят из Jython, почему это сделано в первую очередь (я думаю, что кодировка может быть установлена, даже если это не tty-устройство, но я не уверен, какие последствия это может иметь и почему это сделано).путь).
РЕДАКТИРОВАТЬ, чтобы суммировать результаты многочисленных комментариев ниже , между разработчиками Jython и PyDev, а также автора оригинального вопроса (Филип Дженви, ФабиоЗадрозный и Кристиан Гелинек * (1014 *, соотв.):
В ходе работы была обсуждена и разработана пара тестовых сценариев:
- A Python unон тестирует , написанную Филиппом, для тестирования различных кодировок, установленных минимально настраиваемыми sitecusomize.py скриптами.Фабио считает , что причина, по которой он не устанавливает кодировку, заключается в том, что sys.stdin.encoding наследуется от родительского процесса, а не настраивается скриптом модульного теста.
- Тестовая программа Java , написанная Кристианом, которая настраивает пользовательские потоки ввода / вывода для создания подпроцесса Python, который, по мнению Фабио, больше похож на то, как PyDev настраивает подпроцесс..
Поскольку это не сработало, как ожидал Фабио, он вспомнил , что PyDev также использует переменную окружения PYTHONIOENCODING
.
Как было указаноПо словам Филиппа, текущая (2.5) версия Jython не поддерживает переменную окружения PYTHONIOENCODING
, которая используется PyDev (в сочетании с sitecusomize.py ) для установки кодировки:
Вы можете зарегистрировать ошибку, хотя PYTHONIOENCODING был добавлен только в CPython 2.6, поэтому Jython, вероятно, не будет поддерживать его до 2.7 (пропуск Jython 2.6).