2010-04-22 71 views
10

这是我的代码:如何打印中国字在我的代码..使用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 '哈哈' 

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

我的IDE是Ulipad,这是IDE的错误吗?

第二次更新:

这段代码打印字符右:

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

感谢

+4

作为由同胞的意见,您应该投更多,想询问之前,并更好:-) – Young 2010-04-22 04:02:17

回答

7

您首先需要声明一个编码,因为错误消息如此清晰 - 它甚至会告诉您看看here的细节!你的编码大概是gb2312

BTW,这将是简单的(具有相同的编码声明)做

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

,你可能甚至不需要encode,如果您的sys.stdoutencoding属性设置正确(取决于你的终端上,OS等)。

+0

喜亚历克斯,看看updated2 – zjm1126 2010-04-22 03:38:44

+0

@ zjm1126,使'一= u'xxx'' – Young 2010-04-22 03:42:55

+0

但“A”是谷歌应用程序引擎给我,我不能改变它 – zjm1126 2010-04-22 03:45:35

4

你需要指定python的源代码文件的编码,这里是UTF-8编码。它位于python解释器路径下的右上角。

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

如果你去url in the error message,你可以找到关于指定一个Python源文件的编码的更多信息。

一旦您指定了源文件的编码,您就不必解码文本。

1

下面的代码对我的作品:

# coding: utf8 
print u'哈哈'.encode('utf-8') 

#coding评论告诉Python的文件本身的编码,所以你可以在它直接嵌入UTF-8字符。如果你从一个Unicode字符串开始,就不需要对它进行解码并对其进行重新编码。

1

基于关闭威尔MCCUTCHEN的回答,这也适用:

# coding: utf8 
print '哈哈' 
1

你不能做编码的Unicode字符。编码用于将unicode中编码的所有字符转换为其他代码风格。它不能用于unicode字符。

在争议的方式中,解码只能用于unicode中未编码的字符转换为unicode字符。

如果您在字符串前面声明一个带有'u'字符的字符串,您将得到一个以unicode编码的字符串。您可以使用isinstance(str,unicode)来检测str是否以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)

0

你应该检查你的终端字符编码。

在我的终端上,首先我将字符编码设置为utf-8,一切都没问题。

当我将它设置为GBK时,结果为'鍝埚搱'。