如何在我的代码中打印中文字符?使用Python。

19
这是我的代码:
print '哈哈'.decode('gb2312').encode('utf-8')

...并且它会打印:

SyntaxError: Non-ASCII character '\xe5' in file D:\zjm_code\a.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

如何打印“哈哈”?

更新:当我使用以下代码时:

#!/usr/bin/python
# -*- coding: utf-8 -*-

print '哈哈'

...它打印了鍝堝搱。这不是我想要的结果。

我的IDE是Ulipad,这是IDE的一个bug吗?

第二次更新:

这段代码将会正确地打印出字符:

#!/usr/bin/python
# -*- coding: utf-8 -*-


print u'哈哈'.encode('gb2312')

当我使用这个时:

#!/usr/bin/python
# -*- coding: utf-8 -*-

a='哈哈'
print a.encode('gb2312')
Traceback (most recent call last):
  File "D:\zjm_code\a.py", line 5, in <module>
    print a.encode('gb2312')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

...or...

#!/usr/bin/python
# -*- coding: utf-8 -*-

a='哈哈'
print unicode(a).encode('gb2312')
Traceback (most recent call last):
  File "D:\zjm_code\a.py", line 5, in <module>
    print unicode(a).encode('gb2312')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

...它不起作用。我应该如何适当地打印变量a

谢谢


4
作为同胞的建议,你应该多投票,思考后再提问题,并且要更加友善:-) - Young
6个回答

13

你首先需要声明一种编码格式,正如错误信息所清楚地指出的那样,它甚至告诉你要查阅这里获取详细信息!你的编码格式很可能是gb2312

顺便说一下,使用相同的编码声明会更简单,做法是:

print u'哈哈'.encode('utf-8')

如果您的 sys.stdout 已经正确设置了 encoding 属性(取决于您的终端、操作系统等等),您甚至可能不需要encode部分。


5

您需要指定Python源代码文件的编码,这里是utf-8的编码方式。在Python解释器路径的右上方放置它。

#!/usr/bin/python
# -*- coding: utf-8 -*-

如果你访问错误信息中的URL,http://www.python.org/dev/peps/pep-0263/,你可以找到有关指定Python源文件编码的更多信息。一旦指定了源文件的编码,你就不必解码文本。

3
您不能对Unicode字符进行编码。编码用于将所有以Unicode编码的字符转换为其他代码样式,它不能用于Unicode字符。
在有争议的方式中,解码只能用于未编码为Unicode的字符,以将其转换为Unicode字符。
如果在字符串之前使用'u'字符声明一个字符串,则会获得一个以Unicode编码的字符串。您可以使用isinstance(str,unicode)来检测字符串是否以Unicode编码。
尝试下面的代码。提示:在中文版Windows中,默认的代码样式是"gbk"。 >> a = '哈哈' >> b = u'哈哈' >> isinstance(a,unicode) False >> isinstance(b,unicode) True >> a '\xb9\xfe\xb9\xfe' >> b u'\u54c8\u54c8'
>> a.decode('gbk') u'\u54c8\u54c8' >> a_unicode = a.decode('gbk') >> a_unicode u'\u54c8\u54c8'
>> print a_unicode 哈哈 >> a_unicode.encode('gbk') == a True >> a_unicode == b True >> a.encode('gbk') Traceback (most recent call last): File "", line 1, in UnicodeDecodeError: 'ascii' codec can't decode byte 0xb9 in position 0: ordinal not in range(128)
>> b.decode('gbk') Traceback (most recent call last): File "", line 1, in UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

2
以下代码对我有效:
```html

以下代码适用于我:

```
# coding: utf8
print u'哈哈'.encode('utf-8')
< p > #coding 注释告诉 Python 文件本身的编码,因此您可以直接嵌入 UTF-8 字符。 如果您从 Unicode 字符串开始,则无需对其进行解码和重新编码。 < /p >

1

基于Will McCutchen的答案,这也是可行的:

# coding: utf8
print '哈哈'

1
你应该检查终端字符编码。
在我的终端上,我先将字符编码设置为utf-8,一切都正常。
当我将其设置为GBK时,结果是“鍝堝搱”。

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