python - UnicodeEncodeError:“charmap”编解码器即使在格式化记录器以使用 utf-8 编码后也无法编码字符
问题描述
我从 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。
那么我到底错过了什么?
解决方案
我的问题是我使用的是 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 做同样的事情时,它告诉我“编码”不是一个有效的属性,所以我选择了这个方法。
推荐阅读
- spring-boot - spring cloud - 关闭代理微服务后没有可用的bean importRegistry
- c# - WebApi 项目和 MVC 项目在同一个解决方案中是最佳实践吗?
- python - python重新匹配只出现一次(不重复连续)
- sql - 使用 RANK() OVER 计数时跳过空值
- python - 无法在 TensorFlow Estimator 中训练 Keras 预训练模型
- node.js - Mongoose:有条件地在嵌套文档数组中进行原子查找和更新
- python - 我在 iPad 上使用 Python 编译器来练习程序,但是看不到任何图形视觉效果
- javascript - 保存来自 Whatsapp Web 的未知人员的姓名和数量
- java - 查找要在 pom .XML 文件中使用的正确 Junit 版本
- android - 设置自定义ActionBar在左右两侧留出空间