如何解决UnicodeEncodeError:即使将记录器格式化为使用utf-8编码,“ charmap”编解码器也无法对字符进行编码
我从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√§nnenunibake。
那我到底想念什么?
解决方法
我的问题是我使用的是Scrapy,但我没有正确配置root记录器,而只是为我的每个蜘蛛设置了记录器(行为正确)
本质上,我需要将其添加到执行脚本中:
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进行相同的操作时,它告诉我“ encoding”不是有效的属性,因此我选择了此方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。