Кодирование перенаправленного файла

#windows #encoding #conemu #cmder

#Windows #кодирование #conemu #cmder

Вопрос:

Я пытаюсь перенаправить вывод скрипта python в новый файл, используя инструмент Cmder / ConEmu в Windows 10. Выходные данные будут содержать символы, отличные от ascii, и мне нужно, чтобы кодировка нового файла была UTF-8

Упрощенный, мой скрипт выглядит следующим образом:

 print('Bärlauch')
  

Затем я использую эту команду, чтобы перенаправить ее вывод в новый файл.

 λ python example_script.py > new_file.txt
  

Если я затем проверю свойства файла, его кодировка будет iso-8859-1, Latin-1.

 λ file -i new_file.txt
new_file.txt: text/plain; charset=iso-8859-1
  

Для дальнейшей обработки и практичности мне нужно, чтобы это был UTF-8. На данный момент я не нашел решения, и я искал довольно долгое время. Невозможно ли изменить кодировку, используемую оператором перенаправления?

РЕДАКТИРОВАТЬ: я установил кодовую страницу в UTF-8 перед запуском команды, которая создает новый файл, но кодировка остается Latin-1.

 λ chcp 65001
  

Комментарии:

1. Просто проверяю — точно ли выходные данные скрипта python закодированы как UTF-8?

2. Да, это так. Перед печатью я декодирую из байтового потока с указанным utf8. Но разве это не имеет значения после того, как я распечатал его в стандартный вывод?

3. Я думаю, вы правы, если перенаправление не считается «безсимвольным устройством» стандартного вывода Windows : «… Для консольного устройства используется UTF-8. Несимвольные устройства, такие как дисковые файлы и каналы, используют кодировку системного языка (то есть кодовую страницу ANSI).»

4. Я рекомендую вам не использовать print , by write , чтобы вы могли контролировать кодировку. Проблема с print : он пытается использовать кодировку терминала (если печатается напрямую) или системную кодировку (если передается по каналу). Обе кодировки могут отличаться, и поэтому у вас могут возникнуть проблемы. [OTOH вам не следует использовать UTF-8 при печати на консоли, которая не поддерживает UTF-8]