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

问题描述 投票:11回答:6

这是我的代码:

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

How do I print '哈哈'?

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

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

谢谢

python cjk
6个回答
9
投票

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

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

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

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


4
投票

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

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

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

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


2
投票

以下代码适用于我:

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

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


1
投票

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

# coding: utf8
print '哈哈'

1
投票

你不能对unicode字符进行编码。 Encode用于将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'

>>>打印a_unicode 哈哈 >>> a_unicode.encode('gbk')== a 真正 >>> a_unicode == b 真正

>>> a.encode('gbk') 回溯(最近一次调用最后一次):文件“”,第1行,在UnicodeDecodeError中:'ascii'编解码器无法解码位置0中的字节0xb9:序数不在范围内(128)

>>> b.decode('gbk') 回溯(最近一次调用最后一次):文件“”,第1行,在UnicodeEncodeError中:'ascii'编解码器不能编码位置0-1中的字符:序数不在范围内(128)


1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.