Я перенес свой код Python с хоста Win10 на WS2012R2. Удивительно, но он перестает работать правильно и теперь показывает предупреждающее сообщение: «UnicodeEncodeError: кодек« charmap »не может кодировать символы в позиции 0-2: символы отображаются на»
Я пытался выполнить команду:
set PYTHONLEGACYWINDOWSSTDIO=yes
Мой код:
import logging
import sys
def get_console_handler():
console_handler = logging.StreamHandler(sys.stdout)
return console_handler
def get_logger():
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(get_console_handler())
return logger
my_logger = get_logger()
my_logger.debug("Это отладочное сообщение".encode("cp1252"))
Что мне сделать, чтобы избавиться от этого предупреждения?
Обновление КоллегиПрошу прощения, что ввел вас в заблуждение! Я, очевидно, устал после долгих часов отслеживания ошибок) Проблема не связана с вызовом "* .encode ()" как таковым, она связана с кодировкой python по умолчанию во время работы консоли IO (я так полагаю)! Исходный код делает некоторые запросы из БД в кодировке cp1251, но проблема возникает, когда python пытается преобразовать его в cp1252.
Вот еще один пример того, как вызвать ошибку.
- Создайте простой текстовый файл, т.е. test.txt с текстом «Это отладочное сообщение» и сохраните его cp1252.
- Запустите консоль Python и введите:
f = open("test.txt")
f.read()
Вывод:
f = open("test.txt")
f.read()
Traceback (most recent call last): File "<stdin>", line 1, in <module>
File "c:\project\venv\lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 29: character maps to <undefined>