Как ` :: OutputEncoding / InputEncoding` с Python?

Под Powershell v5, Windows 8.1, Python 3. Почему это не удается и как исправить?

[system.console]::InputEncoding = [System.Text.Encoding]::UTF8; [system.console]::OutputEncoding = [System.Text.Encoding]::UTF8; chcp; "import sys print(sys.stdout.encoding) print(sys.stdin.encoding) sys.stdout.write(sys.stdin.readline()) " | sc test.py -Encoding utf8; [char]0x0422+[char]0x0415+[char]0x0421+[char]0x0422+"`n" | py -3 test.py 

печатает:

 Active code page: 65001 cp65001 cp1251 п»ї???? 

2 Solutions collect form web for “Как ` :: OutputEncoding / InputEncoding` с Python?”

Вы передаете данные в Python; в этот момент stdin Python больше не привязан к TTY (вашей консоли) и не догадается, что такое кодировка. Вместо этого используется локаль системы по умолчанию; на вашей системе, которая является cp1251 (кодовая страница на основе Windows Latin-1).

Установите PYTHONIOENCODING среды PYTHONIOENCODING для переопределения:

PYTHONIOENCODING
Если это задано перед запуском интерпретатора, оно переопределяет кодировку, используемую для stdin / stdout / stderr, в синтаксисе encodingname:errorhandler . И имя encodingname и части :errorhandler являются необязательными и имеют то же значение, что и в str.encode() .

Кажется, что PowerShell не поддерживает переменные окружения командной строки, как это делают оболочки UNIX; проще всего просто установить переменную:

 Set-Item Env:PYTHONIOENCODING "UTF-8" 

или даже

 Set-Item Env:PYTHONIOENCODING "cp65001" 

поскольку кодовая страница Windows UTF-8, по-видимому, не совсем UTF-8, в зависимости от версии Windows и от перенаправления или без перенаправления труб.

Почему бы не включить CPython в powershell ?! CPython настолько прост для встраивания, и powershell очень хорош REPL, чтобы играть с .NET и COM-объектами . Вот простое введение в использование pythonnet из PowerShell. Обратите внимание, как кодирование автоматически распространяется с powershell на python.

 Windows PowerShell Copyright (C) 2015 Microsoft Corporation. All rights reserved. PS C:\Users\denfromufa> [system.console]::InputEncoding = [System.Text.Encoding]::UTF8; PS C:\Users\denfromufa> [system.console]::OutputEncoding = [System.Text.Encoding]::UTF8; PS C:\Users\denfromufa> [Reflection.Assembly]::LoadFile("C:\Python\Miniconda3_64b\Lib\site-packages\Python.Runtime.dll") GAC Version Location --- ------- -------- False v4.0.30319 C:\Python\Miniconda3_64b\Lib\site-packages\Python.Runtime.dll PS C:\Users\denfromufa> $gil = [Python.Runtime.Py]::GIL() PS C:\Users\denfromufa> $sys=[Python.Runtime.Py]::Import("sys") PS C:\Users\denfromufa> $sys.stdin.encoding.ToString() cp65001 PS C:\Users\denfromufa> $sys.stdout.encoding.ToString() cp65001 PS C:\Users\denfromufa> $gil.Dispose() PS C:\Users\denfromufa> [Python.Runtime.PythonEngine]::Shutdown() PS C:\Users\denfromufa> 
  • python: скрученное приложение с интерактивной оболочкой python
  • Как получить текущий идентификатор процесса Linux из командной строки a в shell-агностике, язык-агностик
  • Sublime Text Build System с опциями
  • Как добавить расширения файлов на основе типа файла в Linux / Unix?
  • Подпроцесс Python: взаимодействие со сценарием оболочки
  • Можно ли запускать python SimpleHTTPServer только на localhost?
  • Должен ли я поставить #! (shebang) в сценариях Python и какую форму он должен принять?
  • Получение командной строки Python при вызове из сценария bash
  •  
    Interesting Posts for Van-Lav

    Модуль Python не найден Проблемы после перемещения каталога

    Ложные новые строки, добавленные в командах управления Django

    python, ключевое слово «a in b», как насчет нескольких a?

    Как получить имя поданной формы в Flask?

    Использование взаимоисключающих между группами

    Как организовать несколько файлов python в одном модуле, не ведя себя как пакет?

    Как распиливать и распаковывать экземпляры класса, который наследуется от defaultdict?

    Как сделать гистограмму в ноутбуке ipython с помощью ggplot2 (для python)

    Как проверить последнюю цифру номера

    Интересный «getElementById () принимает ровно 1 аргумент (2 данный)», иногда это происходит. Может кто-нибудь объяснить это?

    Ошибка Python при использовании urllib.open

    Найти подмножество с элементами K, которые наиболее близки друг другу

    Невозможно переместить окно графика Matplotlib и выйти из него с помощью кнопки красного X

    Передача данных между классами в Tweepy и Tornado WebSocket

    ssl с самоподписанным сертификатом с использованием python

    Python - лучший язык программирования в мире.