【问题标题】:Working with UTF-8 encoding in Python source [duplicate]在 Python 源代码中使用 UTF-8 编码 [重复]
【发布时间】:2011-09-11 11:32:05
【问题描述】:

考虑:

$ 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 encoding utf-8 character-encoding


【解决方案1】:

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

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

【讨论】:

  • python3需要这个吗?我知道 python3 假设代码中的所有文字都是 unicode。但它是否假设源文件也是用 utf8 编写的?
  • @RicardoCruz 是的,我相信 utf-8 是 Python 3 的默认值。请参阅 python.org/dev/peps/pep-3120
  • @ricardo-cruz 在 Python 3 中,所有字符串都是 Unicode 字符串,因此源代码的原始编码在运行时不会受到影响。 1. @987654322 @2.PEP 263 -- Defining Python Source Code Encodings
  • 使用# coding: utf8而不是# -*- coding: utf-8 -*-,这样更容易记住。
  • 这应该是对已接受答案的评论!!!!
【解决方案2】:

在源头中可以声明:

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

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)

在 Python 3 中不需要此声明,因为 UTF-8 是默认源编码(请参阅 PEP 3120)。

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

【讨论】:

  • 现在它给出了 """UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1: ordinal not in range(128)"""
  • 不用unicode(),直接用UTF-8编码写字符串。
  • 在 Python 3 之前的版本中,还需要在 unicode 字符串字面量前加上“u”:some_string = u'idzie wąż wąską dróżką'
  • 或#!/usr/bin/env python # 编码:utf-8
  • 在 Python 3 中不再需要此编码声明,其中 utf-8 已经是 Python 源文件的默认值。见python.org/dev/peps/pep-3120
猜你喜欢
  • 2013-05-11
  • 2014-04-23
  • 2016-08-31
  • 2018-05-17
  • 2013-05-07
  • 2016-12-23
  • 2014-01-24
  • 1970-01-01
  • 2017-03-02
相关资源
最近更新 更多