Делаю программу на Python 3.5 Одна из функций программы - вывод HTML из файла в командную строку Windows с подсветкой некоторых тегов разными цветами. Чтение html производится в utf-8. Если вывод оставить также в юникоде, то программа работает только при запуске из командной строки и только с ключевым словом "python". При прямом запуске .py файла, и, соответственно, при запуске полученного с помощью pyinstaller файла .exe программа работает ровно до того момента, когда дело доходит до вывода html, а потом падает с ошибкой:
Traceback (most recent call last)
...
File "C:\...\program.py", line 508, in print_html
print('{1} {blue}{0}{endblue}'.format(line, num, blue='\033[96m', endblue='\033[0m'))
File "C:\Python\Python35\lib\encodings\cp866.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\ufeff' in position 7: character maps to <undefined>
Если для каждой строки файла указать:
str.encode().decode('cp866')
программа при запуске с ключевым словом "python" выдаёт на месте кириллицы крокозябры, а при прямом запуске всё работает почти неплохо. За исключением того момента, что теперь теги неправильно подсвечиваются. К примеру, должны быть подсвечены символы с 45 до знака ">", программа же начинает подсвечивать строку с 25 символа, где находится просто текст, соответственно все дальнейшие теги сдвигаются. Видимо в dos-овской кодировке как-то не так идёт подсчёт символов. А в юникоде программа вообще отказывается что-то выводить. Также для командной строки в коде указан параметр
os.system('chcp 65001')
Как всё-таки сделать вывод в юникоде?