【问题标题】:UnicodeEncodeError: 'charmap' codec can't encode character even after formatting logger to use utf-8 encodingUnicodeEncodeError:“charmap”编解码器即使在格式化记录器以使用 utf-8 编码后也无法编码字符
【发布时间】:2021-02-05 04:48:55
【问题描述】:

我在 python 中的记录器中收到了其中几个错误。

UnicodeEncodeError: 'charmap' 编解码器无法对位置 Y 中的字符 X 进行编码:字符映射到未定义

在 stackoverflow 上环顾四周,我发现很多人已经能够通过告诉他们的记录器使用“utf-8”编码来解决问题,但对我来说,错误仍然存​​在。

这是我用来创建记录器的函数:

def makeLogger(name):
    logger = logging.getLogger(name)
    logger.setLevel(logging.INFO)

    formatter = logging.Formatter('%(asctime)s:%(name)s:%(message)s')

    file_handler = logging.FileHandler(r'C:\Users\lguarro\Documents\Work\SearchEngine_Pure\Log\custom.log', 'a', 'utf-8')
    file_handler.setFormatter(formatter)

    logger.addHandler(file_handler)
    return logger

如您所见,我已明确告诉 FileHandler 使用 utf-8。

以下是我如何调用记录器的示例,其中许多错误源自该记录器:

self.logger.info("Starting url scrape for company, " + rec["Company"] + " using user agent: " + user_agent)

特别是错误通常来自 rec["Company"] 中的字符,因为我的数据库中有很多奇怪的公司名称,例如 lantm√§nnen unibake。

那么我到底错过了什么?

【问题讨论】:

  • 公司名称是“lantmännen unibake”,因此您的数据库中的名称似乎已损坏,或者至少它们是使用错误的编码加载的。
  • 是的,实际上我需要查看我的数据库的来源是否是导致该问题的原因,或者是否是我所做的事情

标签: python python-3.x logging


【解决方案1】:

我的问题是我使用的是 Scrapy,但我没有正确配置根记录器,只是为我的每个蜘蛛设置了记录器(行为正确)

本质上,我需要将其添加到我的执行脚本中:

root_logger = logging.getLogger()
root_logger.setLevel(logging.WARNING)
handler = logging.FileHandler(r'C:\Users\lguarro\Documents\Work\SearchEngine_Pure\Log\scrapy.log', 'w', 'utf-8')
handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(message)s'))
root_logger.addHandler(handler)

无论出于何种原因,当我尝试使用 logging.basicConfig 做同样的事情时,它告诉我“编码”不是一个有效的属性,所以我选择了这个方法。

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 2018-08-25
    • 1970-01-01
    相关资源
    最近更新 更多