为什么Python不能打印Unicode符号?

9

可能重复:
Python UnicodeDecodeError - 我是否误解编码?

我在Python中打印一些Unicode符号时遇到了问题,就像这样:

# encoding: utf-8
print u'ęėįųšįšū'

当我尝试在我的VPS Ubuntu 12服务器上使用Python 2.7运行此代码时,出现错误:
UnicodeEncodeError:'ascii'编解码器无法对位置0-7中的字符进行编码:序数不在范围内(128)
为什么它要尝试使用ASCII进行编码?
这些命令在我的本地机器上正确运行。
该文件以utf-8正确编码。

为什么程序会尝试将它们编码为 ASCII?检查 sys.getdefaultencoding() 的值即可。 - Ashwini Chaudhary
http://docs.python.org/2/howto/unicode.html - Dmitry Zagorulkin
Python可以打印Unicode符号。以下是在解释器、控制台和管道输出到文件的步骤:https://dev59.com/CWkv5IYBdhLWcg3wewxd#20447935 - Eric Leschinski
1个回答

10

打印 unicode 对象需要 Python 猜测输出编码并将 Unicode 代码点编码为该编码。

在您的 VPS 服务器上,输出编码似乎是 ASCII,在无法检测到编码时(例如使用管道时)会默认使用此编码。如果您在终端上运行相同的代码,则通常会检测到终端编码,并且编码会成功。

解决方案是根据脚本要求显式编码。

请阅读 Python Unicode HOWTO 以了解 Python 如何进行此检测以及为什么需要为您编码。


2
请针对这些每天都被问到的问题进行评论。您只是在重复常见问题的答案。 - user2665694
5
如果你能找到一个适合此问题的关闭原因,请随意投票将其关闭。我也可能会投票支持。与此同时,我会尽力帮助提问者。 - Martijn Pieters
1
输出编码为 sys.stdout.encoding,在这种情况下可能不是 utf-8。 - Taha Jahangir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接