Working with utf-8 encoding in Python source
1 2 3 4 5 6 7
| $ 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.org / peps / pep-0263.html细节不清晰的我"。
在源文件头中,您可以声明:
1 2 3
| #!/usr/bin/env python
# -*- coding: utf-8 -*-
.... |
在PEP 0263中有描述:
然后可以在字符串中使用utf-8:
1 2 3 4 5 6 7
| #!/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是默认的源代码(参见pep 3120)。
此外,可能需要验证文本编辑器是否正确地用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?'前缀。
- 在diffrent字符串上,我得到"unicodeencodeerror:'charmap'codec can't encode characters in position 1845-1846:character maps to"..这是否意味着需要不同的编码?
- 或者是!/usr/bin/env python编码:utf-8
- 整个源代码必须以UTF-8编码保存。有些文本编辑器具有"另存为…",您还可以在其中设置编码。
- 你能更具体地说一下编码:utf8报头吗?我在你提供的政治公众人物页面上看不到任何解释。
- @karolis,参见python docs unicode howto的python源代码部分中的unicode文本
- 如果您正在读取文件,那么应该考虑使用如下所示的编解码器:stackoverflow.com/questions/10376923/…
- 是否可以将其作为系统范围内的默认值?(例如,编辑临时短脚本时)
- 不,我只知道申报。许多编辑器可以使用代码模板,所以如果打开新的python,它将使用您喜欢的代码打开。
- 使用# -*- coding: utf-8 -*-还是# encoding: utf-8?哦,我想我找到了:python.org/dev/peps/pep-0263
- 此源头文件位于何处?
- 我把它放在第二行代码上。第一个是舍班。
- 在python 3中不再需要这个编码声明,其中utf-8已经是python源文件的默认值。见python.org/dev/peps/pep-3120
不要忘记验证文本编辑器是否正确编码了UTF-8代码。否则,您可能有不可见的字符,这些字符不能解释为UTF-8。
- 这是3号Python需要的吗?我知道python3假定代码中的所有文字都是Unicode。但它是否假定源文件也是用utf8编写的?
- @Ricardocruz是的,我认为UTF-8是Python3的默认值。见python.org/dev/peps/pep-3120
- @RicardoCruz使用python 3时,所有字符串都将是Unicode字符串,因此源代码的原始编码在运行时不会有任何影响。1。PEP 3120——使用UTF-8作为默认的源代码2。PEP263——定义Python源代码编码
- @Noobninja感谢链接:PEP 3120确认源代码本身现在假定为UTF-8,而不仅仅是字符串。
- 使用# coding: utf8而不是# -*- coding: utf-8 -*-,这更容易记住。
- @noobninja"源的原始编码在运行时不会有影响"不正确。unicode字符串常量要求python知道源文件的编码,以便正确生成unicode字符串。python 3假定为utf-8,因此如果源代码是另一种编码,并且存在非ASCII字符,则需要#coding。
- 这应该是对已接受答案的评论!!!!!