尽管指定了编码,但Python STILL不允许使用日文字符

时间:2011-07-05 15:13:58

标签: python unicode

#!/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中使用它时,这个问题出现了:(任何想法?

4 个答案:

答案 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更改默认值。如果没有重新编码,你仍然会得到错误的输出。