如何在我的代码中打印中文...使用Python
这是我的代码:
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 个回答
你不能对 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)
你需要在Python源代码文件中指定编码方式,这里是utf-8的编码。这个编码声明要放在文件的最上面,紧接着Python解释器的路径下面。
#!/usr/bin/python
# -*- coding: utf-8 -*-
如果你去查看错误信息中的这个网址,你可以找到关于如何指定Python源文件编码的更多信息。
一旦你指定了源文件的编码,之后就不需要再对文本进行解码了。
首先,你需要声明一个编码方式,因为错误信息已经很清楚地告诉你了——它甚至还建议你去这里查看详细信息!你可能需要使用的编码是gb2312
。
顺便说一下,如果你使用相同的编码声明,下面的写法会更简单:
print u'哈哈'.encode('utf-8')
而且如果你的sys.stdout
的encoding
属性设置得当,你甚至可能不需要encode
这一部分(这取决于你的终端、操作系统等)。