Dmitry Develop: post #343 — TG.ME

Запускаю из-под python дочерний процесс cmd.exe.
Хочу получать stdin и stderr в utf-8, так как не хочу определять или угадывать ANSI кодировку, поэтому в cmd.exe сначала выполняется chcp 65001, а потом всё остальное.

Но после чистого запуска появилась ошибка, типа не удаётся декодировать неправильный байт.
Начал разбираться и отлаживать, вручную запускать команду в терминале, и заметил, что chcp почему-то не влияет на терминал, запущенный через cmd [/c|/k] (№1).
Если запускать его внутри другого терминала, поведение такое же, но после второго запуска всё становится правильным и почему-то изменяется кодировка родительского процесса (из-за наследования потоков?) (№2).

Почему происходит №1 и №2, что можно почитать, чтобы разобраться что и почему, можно ли это как-то решить?

Если просить вывод не в utf-8 из-за проблем windows с нет, то как тогда получать unicode вывод?
Нельзя же попросить вывод в utf-16?)
(Оказалось, вроде как только для .NET такое доступно)

>chcp
Текущая кодовая страница: 866

>cmd.exe /c "chcp 65001 > nul & testError"
"testError" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

>chcp
Active code page: 65001

>cmd.exe /c "chcp 65001 > nul & testError"
'testError' is not recognized as an internal or external command,
operable program or batch file.


Обернул запуск cmd в cmd и заработало так, как я ожидал.
Странно, конечно.

>chcp
Текущая кодовая страница: 866

>cmd.exe /c "chcp 65001 > nul & cmd /c "testError""
'testError' is not recognized as an internal or external command,
operable program or batch file.


ссылка на канал | ссылка на группу
April 9, 2025 1.2K 8 1