簡體   English   中英

UnicodeEncodeError:即使將記錄器格式化為使用 utf-8 編碼,“charmap”編解碼器也無法對字符進行編碼

[英]UnicodeEncodeError: 'charmap' codec can't encode character even after formatting logger to use utf-8 encoding

我從我的 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 做同樣的事情時,它告訴我“編碼”不是一個有效的屬性,所以我選擇了這個方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM