#!/usr/bin/env python
# -*- coding: utf8 -*-
print "私"
print u"私"
结果:
ç§
UnicodeEncodeError: 'ascii' codec can't encode character u'\u79c1' in position 0: ordinal not in range(128)
或者,在“私人”和“私人”中闲着:
>>> print "私"
Unsupported characters in input
我遵循了我能找到的所有建议,说我必须把“编码”线放在shebang下面。我所有的网页浏览器都显示汉字很好,我可以输入它。但是,当我尝试在Python中使用它时,这个问题出现了:(任何想法?
答案 0 :(得分:6)
您指定了源文件的编码,并假设使用UTF-8保存了文件。
您的stdout
仍在使用ascii
,因此失败是正常的。
你有一个编码问题而不是解码问题,Python确实很好地读取你的Unicode字符,如果选择正确的编码,可能会将它们保存在文件中。
但是,stdout并不总是与Unicode兼容,尤其是在Windows上。
您可以执行以下操作:sys.stdout.write(strin.encode(utf-8))
并且您不会收到错误,但这并不意味着您将在屏幕上看到这些字符。
答案 1 :(得分:3)
您需要支持UTF8的终端或IDE,或者至少需要支持日语的编码。来自Pywin32扩展库的PythonWin是一个可以工作的IDE。
答案 2 :(得分:2)
试试这个:
#!/usr/bin/env python
# -*- coding: utf8 -*-
print unicode("私","UTF-8")
答案 3 :(得分:0)
sorin's answer是正确的。还有另一个问题涉及同一理由:Setting the correct encoding when piping stdout in Python
Python在写入输出时应用默认编码,此编码不 UTF-8。
IDLE的错误是因为IDLE根据系统区域设置解释输入。 Windows不提供接受UTF-8输入的语言环境,因此默认情况下不接受任意Unicode。您可以使用简单说明in this answer更改默认值。如果没有重新编码,你仍然会得到错误的输出。