我将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()”调用无关,它与IO控制台操作时的默认python编码有关(我想是这样)!原始代码从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>