Как подключить Unicode к родному приложению в PowerShell
У меня есть родная программа, написанная на Python, которая ожидает его ввода на stdin. В качестве простого примера,
#!python3 import sys with open('foo.txt', encoding='utf8') as f: f.write(sys.stdin.read())
Я хочу иметь возможность передать строку (PowerShell) этой программе в качестве стандартного ввода. Python ожидает своего стандартного ввода в кодировке, указанной в $env:PYTHONIOENCODING
, которую я обычно устанавливаю в UTF8
(так что я не получаю ошибок в кодировке).
Но независимо от того, что я делаю, персонажи развращаются. Я искал сеть и нашел предложения по изменению [Console]::InputEncoding
/ [Console]::OutputEncoding
или использовать chcp
, но ничего не работает.
Вот мой основной тест:
PS >[Console]::OutputEncoding.EncodingName Unicode (UTF-8) PS >[Console]::InputEncoding.EncodingName Unicode (UTF-8) PS >$env:PYTHONIOENCODING utf-8 PS >python -c "print('\N{Euro sign}')" | python -c "import sys; print(sys.stdin.read())" ´╗┐? PS >chcp 1252 Active code page: 1252 PS >python -c "print('\N{Euro sign}')" | python -c "import sys; print(sys.stdin.read())" ? PS >chcp 65001 Active code page: 65001 PS >python -c "print('\N{Euro sign}')" | python -c "import sys; print(sys.stdin.read())" ?
Как я могу исправить эту проблему?
Я даже не могу объяснить, что здесь происходит. В принципе, мне нужен тест ( python -c "print('\N{Euro sign}')" | python -c "import sys; print(sys.stdin.read())"
), чтобы распечатать знак Euro. И чтобы понять, почему , я должен делать все, что нужно, чтобы заставить это работать 🙂 (Потому что тогда я могу перевести эти знания в свой реальный сценарий, который должен иметь возможность писать рабочие конвейеры программ Python, которые не ломаются когда они сталкиваются с символами Unicode).
- Специальные символы Python в строках
- писать специальные символы в таблицу excel пакетом python pyExcelerator / xlwt
- Python "string_escape" против "unicode_escape"
- Должны ли операторы импорта Python всегда находиться в верхней части модуля?
- UnicodeEncodeError: кодек «charmap» не может кодировать символы символов на <undefined>, функция печати
Благодаря mike z, следующие работы:
$OutputEncoding = [Console]::OutputEncoding = (new-object System.Text.UTF8Encoding $false) $env:PYTHONIOENCODING = "utf-8" python -c "print('\N{Euro sign}')" | python -c "import sys; print(sys.stdin.read())"
new-object
необходим для получения кодировки UTF-8 без спецификации . $OutputEncoding
переменную $OutputEncoding
и [Console]::OutputEncoding
.
Я до сих пор не полностью понимаю разницу между двумя значениями кодировки и почему вы когда-либо устанавливали их по-разному (по-видимому, по умолчанию).
- Переменная поддомена фляжки не захвачена, другие маршруты 404
- Как напечатать строку назад с помощью цикла for
- Как изменить кодировку файловой системы через python?
- Python – сокращение цикла if / for
- Шаблоны для преобразования объектов Python (кодирование, декодирование, десериализация, сериализация)
- Укажите кодировку исходного файла Python из командной строки
- Как исправить кодировку в Python Mechanize?
- Как предотвратить кодирование аргумента командной строки?
- Как получить кодировку терминала из сценария python?
- Что лучше всего вернуть результат и распечатать его в конце функции?
- php, python и utf-8