如何在我的代码中打印中文单词..使用python

时间:2010-04-22 03:18:30

标签: python cjk

这是我的代码:

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

感谢

6 个答案:

答案 0 :(得分:10)

首先需要声明一个编码,因为错误消息说得很清楚 - 它甚至会告诉你查看here的详细信息!您的编码可能是gb2312

顺便说一句,它会更简单(使用相同的编码声明)

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

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

答案 1 :(得分:4)

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

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

如果你转到url in the error message,你可以找到有关指定python源文件编码的更多信息。

指定源文件的编码后,您不必解码文本。

答案 2 :(得分:2)

以下代码适用于我:

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

#coding注释告诉Python文件本身的编码,因此您可以直接在其中嵌入UTF-8字符。如果从Unicode字符串开始,则无需对其进行解码并重新编码。

答案 3 :(得分:1)

根据Will McCutchen的回答,这也有效:

# coding: utf8
print '哈哈'

答案 4 :(得分:1)

您无法对unicode字符进行编码。 Encode用于将unicode中编码的所有字符转换为其他代码样式。它不能用于unicode字符。

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

如果在字符串之前声明一个带有'u'字符的字符串,您将获得以unicode编码的字符串。您可以使用isinstance(str,unicode)来检测str是否以unicode编码。

请尝试以下代码。提示:在Windows中文版中,默认代码样式为“gbk”。

  

&GT;&GT;&GT; a ='哈哈'
  &GT;&GT;&GT; b =你'哈哈'
  &GT;&GT;&GT; isinstance(一,Unicode)的
  假
  &GT;&GT;&GT; isinstance(B,Unicode)的
  真的

     

&GT;&GT;&GT;一个
  '\ xb9 \ XFE \ xb9 \ XFE'
  &GT;&GT;&GT; b
  U '\ u54c8 \ u54c8'

     

&GT;&GT;&GT; a.decode( 'GBK')
  U '\ u54c8 \ u54c8'
  &GT;&GT;&GT; a_unicode = a.decode('gbk')
  &GT;&GT;&GT; a_unicode
  你'\ u54c8 \ u54c8'

     

&GT;&GT;&GT;打印a_unicode
  哈哈
  &GT;&GT;&GT; a_unicode.encode('gbk')== a
  真
  &GT;&GT;&GT; a_unicode == b
  真的

     

&GT;&GT;&GT; a.encode( 'GBK')
  Traceback(最近一次调用最后一次):     文件“”,第1行,in   UnicodeDecodeError:'ascii'编解码器无法解码位置0的字节0xb9:序号不在范围内(128)

     

&GT;&GT;&GT; b.decode( 'GBK')
  Traceback(最近一次调用最后一次):     文件“”,第1行,in   UnicodeEncodeError:'ascii'编解码器无法编码位置0-1中的字符:序数不在范围内(128)

答案 5 :(得分:1)

您应该检查终端字符编码。

在我的终端上,首先我将字符编码设置为utf-8,一切正常。

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