You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

设置UTF-8编码后Python控制台无打印输出问题求助

解决设置UTF-8编码后print语句无控制台输出的问题

我之前也碰到过一模一样的问题,这事儿其实是因为reload(sys)加上修改默认编码的操作,干扰了Python标准输出流的编码匹配,导致print的内容没法正常被控制台解析输出。

问题背后的原因

当你执行reload(sys)再修改sys.setdefaultencoding('utf-8')时,虽然改变了Python内部处理字符串的默认编码,但控制台自身的输出编码可能和这个设置不兼容,甚至这个操作会意外破坏标准输出流的正常工作状态。而且要注意:

  • 在Python 3里,这个操作完全没必要——Python 3默认就是用UTF-8处理字符串的
  • 哪怕是在Python 2中,这种修改全局默认编码的方式也属于不推荐的hack手段,很容易引发各种隐性问题

靠谱的解决办法

如果是Python 2环境:

  • 优先不要碰全局默认编码,而是在文件开头添加编码声明即可处理大部分中文/表情符号问题:
    # -*- coding: utf-8 -*-
    
  • 如果确实需要调整控制台输出编码,直接针对标准输出流设置编码,别改全局默认:
    import sys
    import codecs
    # 稳妥的方式重新设置标准输出编码
    sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
    

如果是Python 3环境:

  • 直接删掉reload(sys)sys.setdefaultencoding('utf-8')这两行代码!Python 3默认已经用UTF-8处理字符串,只要你的控制台本身支持UTF-8(比如Windows cmd可以执行chcp 65001切换编码),print就能正常输出。

额外提醒

修改全局默认编码是个治标不治本的办法,官方明确不推荐,因为它会影响整个程序里所有字符串的处理逻辑,很容易埋下难以排查的bug。遇到编码问题,最好的方式是针对性处理特定字符串的编码/解码,而不是动全局设置。

内容的提问来源于stack exchange,提问作者Okym

火山引擎 最新活动