这是我的代码:
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
?
感谢
答案 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时,结果为'鍝埚'。