python - logging.StreamHandler 中出现 UnicodeEncodeError

标签 python windows

我将我的 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 时出现问题。

这是另一个如何引发错误的示例。

  1. 创建一个纯文本文件,即包含文本“Это отладочное сообщение”的 test.txt 并将其保存为 cp1252。
  2. 运行 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/

相关文章:

windows - 如何加快vagrant共享文件夹速度

c# - 在非管理员帐户上自动启动具有管理员权限的 WinForms 应用程序

java - Linux 错误代码 24 是什么意思?

javascript - 如何使用 QWebChannel 将信息从 JS 传递到 Python

java - 从 Windows 和 linux 从 Linux 机器访问文件夹

python - 用 pandas drop row 清理嘈杂的数据

c# - Ubuntu上的Unity/C#和Python通信

python - lxml xpath 如何处理xml实体

python - 获取具有最大置信度的边界框 pandas opencv python

python - Pandas/Numpy Groupby + 聚合(包括整数均值)+ 过滤器