我在Python3 中使用Logging模块把日志打到终端输出时会报错。
代码如下:
import logging
logging.basicConfig(level=logging.INFO,
filename='log.log',
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))
报错如下:
--- Logging error ---
Traceback (most recent call last):
File "C:\Users\peter\Anaconda3\lib\logging\__init__.py", line 1028, in emit
stream.write(msg + self.terminator)
UnicodeEncodeError: 'gbk' codec can't encode character '\u1ecb' in position 582: illegal multibyte sequence
Call stack:
File "C:/Users/peter/Documents/GitHub/youtube-spider/youtube-search-spider.py", line 129, in <module>
asyncio.get_event_loop().run_until_complete(new_search_page(url=search_url))
File "C:\Users\peter\Anaconda3\lib\asyncio\base_events.py", line 566, in run_until_complete
self.run_forever()
File "C:\Users\peter\Anaconda3\lib\site-packages\nest_asyncio.py", line 71, in run_forever
self._run_once()
File "C:\Users\peter\Anaconda3\lib\asyncio\base_events.py", line 1771, in _run_once
handle._run()
File "C:\Users\peter\Anaconda3\lib\site-packages\nest_asyncio.py", line 135, in run
ctx.run(self._callback, *self._args)
File "C:\Users\peter\Anaconda3\lib\asyncio\tasks.py", line 329, in __wakeup
self.__step()
File "C:\Users\peter\Anaconda3\lib\site-packages\nest_asyncio.py", line 101, in step
step_orig(task, exc)
File "C:\Users\peter\Anaconda3\lib\asyncio\tasks.py", line 249, in __step
result = coro.send(None)
Message: "counts: 68 names:
Arguments: ()
这是因为终端默认的编码是gbk,不是utf-8,修改代码如下:
sys.stdout.reconfigure(encoding='utf-8')
import logging
logging.basicConfig(level=logging.INFO,
filename='log.log',
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))
参考:
unicode - How to set sys.stdout encoding in Python 3? - Stack Overflow
python - python3 logger - UnicodeEncodeError - Stack Overflow
python 3.6 logging modul error UnicodeEncodeError: ‘charmap’ codec can’t encode characters - Stack Overflow
UTF-8 In Python logging, how? - Stack Overflow

本文介绍了在Python3中遇到UnicodeEncodeError:'gbk' codec can't encode character问题的解决办法,重点是终端编码不支持Unicode字符。通过修改代码设置sys.stdout编码为UTF-8,参考了Stack Overflow上的相关问题解答。
2783

被折叠的 条评论
为什么被折叠?



