如何在我的代码中打印中文...使用Python

19 投票
6 回答
78915 浏览
提问于 2025-04-15 21:54

这是我的代码:

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 '哈哈'

...它输出的是 鍝堝搱。这不是我想要的结果。

我的开发环境是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)

...或者...

#!/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 呢?

谢谢

6 个回答

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)

5

你需要在Python源代码文件中指定编码方式,这里是utf-8的编码。这个编码声明要放在文件的最上面,紧接着Python解释器的路径下面。

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

如果你去查看错误信息中的这个网址,你可以找到关于如何指定Python源文件编码的更多信息。

一旦你指定了源文件的编码,之后就不需要再对文本进行解码了。

13

首先,你需要声明一个编码方式,因为错误信息已经很清楚地告诉你了——它甚至还建议你去这里查看详细信息!你可能需要使用的编码是gb2312

顺便说一下,如果你使用相同的编码声明,下面的写法会更简单:

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

而且如果你的sys.stdoutencoding属性设置得当,你甚至可能不需要encode这一部分(这取决于你的终端、操作系统等)。

撰写回答