微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UnicodeEncodeError:即使将记录器格式化为使用utf-8编码,“ charmap”编解码器也无法对字符进行编码

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?