在Python源代码中使用UTF-8编码

在Python源代码中使用UTF-8编码,python,encoding,utf-8,character-encoding,Python,Encoding,Utf 8,Character Encoding,考虑: $ cat bla.py u = unicode('d…') s = u.encode('utf-8') print s $ python bla.py File "bla.py", line 1 SyntaxError: Non-ASCII character '\xe2' in file bla.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for de

考虑:

$ cat bla.py 
u = unicode('d…')
s = u.encode('utf-8')
print s
$ python bla.py 
  File "bla.py", line 1
SyntaxError: Non-ASCII character '\xe2' in file bla.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

如何在源代码中声明UTF-8字符串?

在源标题中,您可以声明:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
....
其描述见:

然后可以在字符串中使用UTF-8:

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

u = 'idzie wąż wąską dróżką'
uu = u.decode('utf8')
s = uu.encode('cp1250')
print(s)
Python 3中不需要此声明,因为UTF-8是默认的源代码编码(请参阅)


此外,验证您的文本编辑器是否正确地用UTF-8编码代码可能是值得的。否则,可能会有不可见的字符未被解释为UTF-8。

不要忘记验证文本编辑器是否正确地将代码编码为UTF-8


否则,可能会有不可见的字符未被解释为UTF-8。

现在它给出了“UnicodeDecodeError:“ascii”编解码器无法解码第1位的字节0xe2:序号不在范围(128)”您不需要使用
unicode()
,只需以UTF-8编码编写字符串即可。在早于3的Python版本中,您还需要在unicode字符串文本前面加上“u”:
some_string=u'idzie wąwąskądróżką
。或#/usr/bin/env python#coding:utf-8在python3中不再需要此编码声明,其中utf-8已经是python源文件的默认值。请看“查看详细信息”对我来说似乎很清楚。python3需要这个吗?我知道python3假设代码中的所有文本都是unicode。但是它是否假设源文件也是用utf8编写的?@RicardoCruz是的,我相信utf-8是Python 3的默认值。请参阅@ricardo cruz With Python 3,所有字符串都将是Unicode字符串,因此源代码的原始编码在运行时不会产生任何影响。1.2.使用
#coding:utf8
而不是
#-*-coding:utf-8-*-
,这更容易记住。这应该是对公认答案的评论!!!!