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

Working with UTF-8 encoding in Python source [duplicate]

提问人:Nullpoet 提问时间:6/9/2011 最后编辑:Peter MortensenNullpoet 更新时间:3/30/2023 访问量:1070474

问:

考虑:

$ 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 字符串?

python 编码 utf-8 字符编码

评论

6赞 Lennart Regebro 5/5/2013
“详情请看 python.org/peps/pep-0263.html”对我来说似乎很清楚。

答:

872赞 Michał Niklas 6/9/2011 #1

在 Python 3 中,UTF-8 是默认的源编码(参见 PEP 3120),因此 Unicode 字符可以在任何地方使用。

在 Python 2 中,您可以在源代码头中声明:

# -*- coding: utf-8 -*-
....

这在 PEP 0263 中进行了描述。

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

# -*- coding: utf-8 -*-

u = 'idzie wąż wąską dróżką'
uu = u.decode('utf8')
s = uu.encode('cp1250')
print(s)

评论

8赞 Nullpoet 6/9/2011
现在它给出 “”“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1: ordinal not within range(128)”“”
1赞 Michał Niklas 6/9/2011
你不需要使用,只需用 UTF-8 编码写字符串即可。unicode()
32赞 Anton Strogonoff 6/9/2011
在早于 3 的 Python 版本中,您还需要在 unicode 字符串文字前面加上“u”: 。some_string = u'idzie wąż wąską dróżką'
0赞 Nullpoet 6/9/2011
在不同的字符串上,我得到 “”“UnicodeEncodeError: 'charmap' 编解码器无法对位置 1845-1846 中的字符进行编码:字符映射到 <undefined>”“”...这是否意味着需要不同的编码?
3赞 warvariuc 6/9/2011
或者 #!/usr/bin/env python # 编码:utf-8
92赞 Ranaivo 2/18/2014 #2

不要忘记验证您的文本编辑器是否以 UTF-8 格式正确编码您的代码。

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

评论

2赞 Ricardo Magalhães Cruz 6/29/2016
python3 需要这个吗?我知道 python3 假设代码中的所有文字都是 unicode。但是它是否假设源文件也是用 utf8 编写的?
1赞 Jonathan Hartley 8/11/2016
@RicardoCruz 是的,我相信 utf-8 是 Python 3 的默认值。查看 python.org/dev/peps/pep-3120
0赞 noobninja 1/29/2017
@ricardo-cruz 在 Python 3 中,所有字符串都将是 Unicode 字符串,因此源代码的原始编码在运行时不会产生影响。1. PEP 3120 -- 使用 UTF-8 作为默认源编码 2.PEP 263 -- 定义 Python 源代码编码
0赞 Ricardo Magalhães Cruz 1/29/2017
@noobninja感谢您的链接:PEP 3120 确认源代码本身现在假定为 UTF-8,而不仅仅是字符串。
26赞 show0k 4/10/2017
使用而不是哪个更容易记住。# coding: utf8# -*- coding: utf-8 -*-