请叫我江同学呀 2023-01-22 19:37 采纳率: 55.6%
浏览 45
已结题

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

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

在这里插入图片描述

在这里插入图片描述

  • 写回答

3条回答 默认 最新

  • a7464553 2023-01-22 20:03
    关注

    上面这段代码中,可以看到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]
    )

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月28日
  • 已采纳回答 6月28日
  • 修改了问题 1月22日
  • 创建了问题 1月22日