提问人:Nullpoet 提问时间:6/9/2011 最后编辑:Peter MortensenNullpoet 更新时间:3/30/2023 访问量:1070474
在 Python 源代码中使用 UTF-8 编码 [duplicate]
Working with UTF-8 encoding in Python source [duplicate]
问:
考虑:
$ 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 字符串?
答:
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 -*-
评论