Win7控制台Python 2编码问题:含变音符号路径脚本报错
嘿,这个问题我熟!我来帮你搞定Win7下Python2.7处理含变音符号路径时的print报错问题~
问题核心原因
你已经通过win_unicode_console和chcp 65001搞定了控制台的路径显示,但Python2.7的print语句对Unicode的处理还有坑:当错误信息(err)里包含变音符号这类Unicode字符时,直接print会试图把它转成系统默认编码(哪怕你切了65001,Python2内部的编码衔接还是有问题),最终触发编码错误。
靠谱的解决办法
方法1:手动编码Unicode输出
直接修改你的print语句,先把错误信息转成Unicode再用UTF-8编码输出:
# 如果err是普通字符串,先转Unicode再编码 print unicode(err).encode('utf-8') # 如果err本身已经是Unicode对象,直接编码即可 print err.encode('utf-8')
方法2:初始化win_unicode_console
有时候光安装win_unicode_console还不够,需要在脚本最开头手动启用它,确保所有IO都走Unicode通道:
import sys from win_unicode_console import enable # 放在脚本最开头,甚至在其他import之前 enable()
这样处理后,你就能直接用print err,不用手动编码也能正常输出含变音符号的内容了。
方法3:替换成自定义的Unicode打印函数
如果脚本里有大量print语句,可以替换成一个专门处理Unicode的函数,一劳永逸:
import sys def uprint(content, encoding='utf-8'): if isinstance(content, unicode): content = content.encode(encoding) sys.stdout.write(content + '\n') # 把所有print err改成这个 uprint(err)
额外注意事项
- 确保你的Python脚本文件本身是UTF-8编码保存的,并且在脚本开头加上编码声明:
# -*- coding: utf-8 -*- - 尽量不要混用
print语句和sys.stdout.write,保持IO方式一致,避免编码冲突
内容的提问来源于stack exchange,提问作者thopy
相关产品推荐
相关产品推荐

