Как сделать надлежащий Unicode и перенаправление вывода ANSI на cmd.exe?

Если Вы делаете автоматизацию на окнах, и Вы перенаправляете вывод различных команд (внутренний cmd.exe или внешний, Вы обнаружите, что Ваши файлы журнала содержат объединенный Unicode и вывод ANSI (подразумевать, что они недопустимы и не загрузятся хорошо в средствах просмотра/редакторах).

Это, возможно заставить cmd.exe работать с UTF-8? Этот вопрос не о дисплее, s о stdin/stdout/stderr перенаправлении и Unicode.

Я ищу решение, которое позволило бы Вам:

  • перенаправьте вывод внутренних команд в файл с помощью UTF-8
  • вывод перенаправления внешних команд, поддерживающих Unicode в файлы, но закодированный как UTF-8.

Если невозможно получить этот вид последовательности с помощью пакетных файлов, там другой способ решить эту проблему, как использование сценариев Python для этого? В этом случае я хотел бы знать, возможно ли сделать одно только обнаружение Unicode (пользователь, использующий сценарии, не должен помнить, произведут ли названные инструменты Unicode или нет, это будет просто ожидать преобразовывать вывод в UTF-8.

Для простоты мы предположим, что, если вывод инструмента является не-Unicode, это рассмотрят как UTF-8 (никакое преобразование кодовой страницы).

8
задан sorin 24 April 2010 в 20:56
поделиться

1 ответ

Вы можете использовать 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.

8
ответ дан 5 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: