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

Nul*_*oet 404 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 details
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*las 783

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

#!/usr/bin/env python
# -*- coding: utf-8 -*-
....
Run Code Online (Sandbox Code Playgroud)

它在PEP 0263中描述:

然后你可以在字符串中使用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)
Run Code Online (Sandbox Code Playgroud)

Python 3中不需要此声明__CODE__,默认源编码也是如此(请参阅PEP 3120).

此外,可能需要验证文本编辑器是否在utf-8中正确编码了代码.否则,您可能会有不可解释为utf-8的不可见字符.

  • 在3岁以上的Python版本中,您还需要使用"u"为unicode字符串文字添加前缀:`some_string =u'idziewążwąskądróżką'`. (28认同)
  • Python 3中不再需要这种编码声明,其中utf-8已经是Python源文件的默认声明.请参阅https://www.python.org/dev/peps/pep-3120/ (8认同)
  • 现在它给出了"""UnicodeDecodeError:'ascii'编解码器无法解码位置1中的字节0xe2:序数不在范围内(128)""" (7认同)
  • 或#!/ usr/bin/env python #coding:utf-8 (2认同)

小智 86

不要忘记验证文本编辑器是否在utf-8中正确编码了您的代码.否则,您可能会有不可解释为utf-8的不可见字符.

  • 使用`#coding:utf8`而不是`# - * - coding:utf-8 - * - `这更容易记住. (11认同)
  • python3需要这个吗?我知道python3假定代码中的所有文字都是unicode。但是,是否假定源文件也是用utf8编写的? (2认同)
  • 这应该是对“已接受答案”的评论!!!! (2认同)