less.exe выводит некорректные символы - PullRequest
0 голосов
/ 14 апреля 2019

Следующая программа очень проста. Он запускает подпроцесс, который запускает порт Windows утилиты Unix less .

import subprocess
subprocess.run('less.exe', input='Macarrão é uma delícia.', encoding='utf-8')

Ввод:

Macarrão é uma delícia.

Вывод, однако, выглядит как:

Macarrão é uma delícia.

Чем это объясняется? Я заметил, что запуск chcp 65001 перед запуском моего кода на python решает проблему, но просматривая связанный пост Я не уверен, что это лучший способ сделать это. Цитата из принятого ответа:

chcp 65001 очень опасен. Если программа не была специально разработана работать с дефектами в API Windows (или использует среду выполнения C библиотека, которая имеет эти обходные пути), она не будет работать надежно. Win8 исправляет ½ этих проблем с cp65001, но остальное все еще применимо к Win10 .

Я использую Python 3.7.0 в 64-разрядной версии Windows 10.

1 Ответ

0 голосов
/ 14 апреля 2019

Как подсказывает eryk, один из способов - установить кодовую страницу консоли на UTF-8, запустить less.exe и вернуть кодовой странице прежнее значение.

import subprocess
from ctypes import windll

prev_codepage = windll.kernel32.GetConsoleOutputCP()
windll.kernel32.SetConsoleOutputCP(65001)
subprocess.run("less.exe", input='Macarrão é uma delícia', encoding='utf-8')
windll.kernel32.SetConsoleOutputCP(prev_codepage)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...