我刚开始学习Python,但已经遇到了困难。
我有一个简单的脚本,只有一个命令:
#!/usr/bin/env python3
print("Příliš žluťoučký kůň úpěl ďábelské ódy.") # Text in Czech
当我尝试运行这个脚本时:
python3 hello.py
我收到了这个消息:
Traceback (most recent call last):
File "hello.py", line 2, in <module>
print("P\u0159\xedli\u0161 \u017elu\u0165ou\u010dk\xfd k\u016fn \xfap\u011bl \u010f\xe1belsk\xe9 \xf3dy.")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)
我正在使用Kubuntu 16.04和Python 3.5.2。当我尝试这样做:
export PYTHONIOENCODING=utf-8
时,它可以工作,但仅在临时情况下。下次打开bash时我会得到相同的错误。根据https://docs.python.org/3/howto/unicode.html#the-string-type,Python源代码的默认编码是UTF-8。 所以我的源文件已保存为UTF-8,Konsole也设置为UTF-8,但我仍然会遇到错误! 即使我添加了
# -*- coding: utf-8 -*-
起初它什么都不做。
另一个奇怪的事情是:当我仅使用Python而不使用Python3运行它时,它可以工作。如何在Python 2.7.12中运行并且在3.5.2中无法运行?
有没有解决这个问题的想法?谢谢。
ascii
的原因。 - Mark TolonenLANG=cs_CZ.UTF-8
但你还没有构建/安装捷克语环境。如果你的语言环境出现问题或丢失,Python将默认使用ASCII编码。在Python 2中它能正常运行是因为该字符串是一个字节字符串,可以直接写入终端。但在Python 3中,在写入终端时需要对字符串进行编码。 - Alastair McCormackLANG
被设置为C
,这是使用ANSI的默认设置。只有少数LC_***被设置为cs_CZ.UTF-8
,其他的都从LANG
继承了C
。我在/etc/default/locale/
中添加了以下行:LANG=cs_CZ.UTF-8 LANGUAGE=cs_CZ.UTF-8 LC_ALL=cs_CZ.UTF-8
它起作用了!现在为什么我要将其写成评论而不是答案呢?现在locale
的输出到处都是cs_CZ.UTF-8
,除了LANG
。为什么我不能设置这个变量? - user7360596/etc/default/locale
中设置LANG
。只有在想要特定的例外情况(例如使用英语错误消息)时才配置诸如LANGUAGE
之类的内容。一旦设置并重新启动会话,那么每个LC_
应该都是相同的。检查LANG
是否在/etc/environment
或个人shell文件中设置。请参阅https://help.ubuntu.com/community/Locale。 - Alastair McCormack