How to fix Python encoding in terminal
当从像gnome终端这样的终端程序运行时,如何设置python与sys.stdout一起使用的默认编码?
如果我在gnome终端内执行一个python脚本,如果脚本试图打印unicode字符,我会得到臭名昭著的"unicode encode error:'ascii'codec can't encode character"错误。然而,即使gnome终端的编码设置为"utf-8",如果我打印sys.stdout.encoding,它显示"ansi x3.4-1968"。
重现错误的最小代码是:
1 2
| python -c 'import sys; print sys.stdout.encoding; print u"\u0411
"' |
为什么python不使用终端的utf-8编码?
注意,我不是在问如何将字符串转换为ASCII。
- echo $LANG和echo $LC_ALL打印了什么?
- 在脚本文件的顶部尝试过# -*- coding: utf-8 -*-?
- @据我所知,szabolcs没有脚本——只有一个命令。
- 您能在终端上显示locale命令的输出吗?
- 如果在打印Unicode字符串之前使用合适的编码(如utf8)对其进行编码,会怎么样?
- 不完全是问题的答案,但这里的信息可能会帮助您找到答案:stackoverflow.com/questions/2596714/…
- @Szabolcs和高级选民。# coding: utf8声明了源文件的编码,而没有其他内容。
尝试设置PYTHONIOENCODING变量,或使用此问题中的解决方案。