我将我的 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 字符集中从 DB 发出一些请求,但是当 python 尝试将其转换为 cp1252 时出现问题。
这是另一个如何引发错误的示例。
- 创建一个纯文本文件,即包含文本“Это отладочное сообщение”的 test.txt 并将其保存为 cp1252。
- 运行 python 控制台并输入:
f = open("测试.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>
最佳答案
使用编码(“utf-8”)。这是 python 编码的列表:https://docs.python.org/2.4/lib/standard-encodings.html
my_logger.debug("Это отладочное сообщение".encode("utf-8"))
然后使用 .decode("utf-8") 查看字符串的可打印值
关于python - logging.StreamHandler 中出现 UnicodeEncodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58756276/