python 3.6 *记录模块错误* UnicodeEncodeError:'charmap'编解码器无法编码字符

时间:2017-10-08 21:21:43

标签: python-3.x logging encoding character-encoding error-logging

在Windows 10上,日志记录模块发送此错误(使用scrapy)

# --- Logging error ---
...
# UnicodeEncodeError: 'charmap' codec can't encode characters in position 175-176: character maps to <undefined>

我已经读过我应该添加encoding='utf-8'但我没有找到如何在下面的代码中添加它。 编辑:根据the tuto它不需要。

configure_logging(install_root_handler=False) #override default log settings
logging.basicConfig(
    filename='logfile.log',
    format='%(levelname)s: %(message)s',
    datefmt='%m-%d %H:%M',
    level=logging.INFO #CRITICAL ERROR WARNING  INFO    DEBUG    NOTSET 
)

我发现了很多关于这些主题的问题,但主要是关于python 2(或not related to the logging module)。日志教程甚至没有谈论utf-8。 (请注意,我可以毫无问题地打印UTF8字符。只有记录模块才会出现问题)

1 个答案:

答案 0 :(得分:9)

我没有使用Scrapy,但我遇到了同样的问题,因为vanilla Python 3.6无法通过logging将UTF-8字符写入文件(控制台工作正常)细)。

基于this comment,我在'utf-8'初始化时添加了FileHandler。我通过INI文件配置日志记录,如下所示:

[handler_file]
class = FileHandler
args = (r'log.txt', 'a', 'utf-8')
level = NOTSET
formatter = generic

使用logging.basicConfig()我认为您应该能够执行以下操作:

configure_logging(install_root_handler=False) #override default log settings
logging.basicConfig(
    handlers=[logging.FileHandler('logfile.log', 'w', 'utf-8')],
    format='%(levelname)s: %(message)s',
    datefmt='%m-%d %H:%M',
    level=logging.INFO #CRITICAL ERROR WARNING  INFO    DEBUG    NOTSET 
)