pycharm命令行输出乱码

pycharm命令行输出乱码

我使用logging打印日志,使用utf-8编码,结果命令行打印出来的汉字乱码。通过测试,我发现当我使用gbk编码时可以正常输出汉字,但是如果我改成utf-8,则会出现乱码,那么我该如何修改,才能使我可以使用utf-8编码?
        rotating_file_handler = RotatingFileHandler(
            filename="./logs/log.log", mode="a", maxBytes=1000000, backupCount=100)
        rotating_file_handler.setLevel(level=logging.WARNING)       # 保存到日志文件的日志等级
        stream_handler = logging.StreamHandler()
        stream_handler.setLevel(logging.INFO)                       # 打印在命令行的日志等级
        logging.basicConfig(
            level=logging.INFO,
            format="%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s",
            handlers=[rotating_file_handler, stream_handler]
        )
        asyncqt_logger = logging.getLogger('asyncqt')
        asyncqt_logger.setLevel(logging.WARNING)
        logging.info("初始化日志完成。")

img

img

我使用这样的设置的时候,命令行输出都是正常的

在这里插入图片描述

在这里插入图片描述

上面这段代码中,可以看到stream_handler是用来打印在命令行的日志的,所以我们可以把它的编码设置为utf-8,代码如下:
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', encoding='utf-8'))

然后在basicConfig中把stream_handler加入到handlers中即可,修改后的代码如下:
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s",
handlers=[rotating_file_handler, stream_handler]
)

在第一次使用logging打印日志的时候,如下代码打印出来的日志不识别中文,默认的编码格式是ASCII编码

FileHandler有定义编码的默认值,修改为'utf-8' 就可以解决,例如:

fh = logging.FileHandler(logname, encoding='utf-8') # 指定utf-8格式编码