Под Powershell v5, Windows 8.1, Python 3. Почему это не удается и как исправить?Как `[System.Console] :: OutputEncoding/InputEncoding` с Python?
[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
п»ї????
Каждая программа имеет свой собственный стандартный ввод/stdout. Глобальных системных параметров нет, которые могут переопределить настройки другой программы, поэтому все, что вы установили в PowerShell, влияет только на PowerShell. Если возможно, установите кодировку stdin python вручную. Я думаю, для этого должно быть много примеров. – wOxxOm
@wOxxOm Есть ли некоторые соглашения для Python? Кажется, он получает свою стандартную кодировку от системной. Но почему не stdin? – Artyom
Я хочу сказать, что каждая программа использует собственную эвристику и логику, поэтому все, что вы установили в PowerShell, не относится к обработке python для stdin. Ну, вообще. Python 3 пытается быть умным и угадывать stdin-кодировку, но вы не можете * полагаться на это, конечно. Как я уже сказал, должно быть много примеров, как установить stdin-кодирование в python. – wOxxOm