Если Вы делаете автоматизацию на окнах, и Вы перенаправляете вывод различных команд (внутренний cmd.exe
или внешний, Вы обнаружите, что Ваши файлы журнала содержат объединенный Unicode и вывод ANSI (подразумевать, что они недопустимы и не загрузятся хорошо в средствах просмотра/редакторах).
Это, возможно заставить cmd.exe работать с UTF-8? Этот вопрос не о дисплее, s о stdin/stdout/stderr перенаправлении и Unicode.
Я ищу решение, которое позволило бы Вам:
Если невозможно получить этот вид последовательности с помощью пакетных файлов, там другой способ решить эту проблему, как использование сценариев Python для этого? В этом случае я хотел бы знать, возможно ли сделать одно только обнаружение Unicode (пользователь, использующий сценарии, не должен помнить, произведут ли названные инструменты Unicode или нет, это будет просто ожидать преобразовывать вывод в UTF-8.
Для простоты мы предположим, что, если вывод инструмента является не-Unicode, это рассмотрят как UTF-8 (никакое преобразование кодовой страницы).
Вы можете использовать chcp
, чтобы изменить активную кодовую страницу. Это также будет использоваться для перенаправления текста:
chcp 65001
Однако имейте в виду, что это не будет иметь никакого эффекта, если cmd
был запущен с переключателем / u
, который заставляет Unicode ( UTF-16 в данном случае) вывод перенаправления. Если этот переключатель активен, то весь вывод будет в UTF-16LE, независимо от кодовой страницы, установленной с помощью chcp
.
Также обратите внимание, что консоль будет непригодна для интерактивного вывода, если для нее установлено значение «Растровые шрифты». В этом случае я получаю забавные сообщения об ошибках:
C:\Users\Johannes Rössel\Documents>x
Active code page: 65001
The system cannot write to the specified device.
Так что либо используйте разумную настройку (шрифт TrueType для консоли), либо не выполняйте этот трюк при интерактивном использовании консоли и наличии пути, содержащего символы, отличные от ASCII.