在python源文件中包含unicode的首选方法是什么?

时间:2014-04-14 14:19:00

标签: python unicode coding-style python-2.x

在源代码中使用unicode字符串时,似乎有许多方法可以为猫提供皮肤。 docs和相关的PEP有很多关于可能的信息,但是关于什么是首选的信息很少。

例如,以下每个似乎都给出相同的结果:

# coding: utf8
u1 = '\xe2\x82\xac'.decode('utf8')
u2 = u'\u20ac'
u3 = unichr(0x20ac)
u4 = "€".decode('utf8')
u5 = u"€"

如果使用__future__导入,我还找到了另一个选项:

# coding: utf8
from __future__ import unicode_literals
u6 = "€"

在python中,我习惯了一种明显的方法,所以在源文件中包含国际内容的推荐方法是什么?

这是一个python 2问题。


一些背景 ...

方法u1,u2,u3对我来说似乎很傻,但我看到有足够多的人这样写,我认为这不仅仅是个人偏好 - 有什么特别的原因我们可能只想在源代码中强制使用ascii字符文件,而不是指定编码,或者这只是一个习惯,更容易在旧代码中找到?

使用实际符号而不是某些转义序列的代码具有巨大的可读性改进,并且不这样做似乎忽略了语言的优势而不是利用python的辛勤工作开发者。

1 个答案:

答案 0 :(得分:2)

我认为我使用过的最常见的方法(在Python 2中)是:

# coding: utf-8

text = u'résumé'
  • 文字可读。与text = u'r\u00e9sum\u00e9'比较,我必须在哪里查找它是什么字符。其他一切都不太可读。
  • 如果您使用的是Unicode,那么您的变量肯定是text和 not 二进制数据,因此将它保留在除unicode对象之外的任何内容中都没有意义。 (以防'€'成为一种选择。)

from __future__ import unicode_literals更改程序的解析模式;我想你需要更多地意识到文本和文本之间的区别。二进制数据。 (有些东西,如果你问我,大多数程序员都不擅长。)

在大型项目中,仅针对一个文件更改解析模式可能会令人困惑,因此它可能更好地作为所有文件或没有文件,因此您不需要引用文件头。如果您使用的是Python 2,则默认情况下可能会关闭,除非您还要针对Python 3.如果您的目标是Python 2.5或更早的¹,那么它不是一个选项。

如今,大多数编辑都支持Unicode。也就是说,我看过编辑器损坏了文件中的非ASCII字符,但极少;如果此类提交的作者没有充分审查他的代码,代码审查应该抓住这一点。 (差异很明显。)不值得支持这些人:Unicode就在这里;跟踪他们并修复他们的设置。值得注意的是,vim处理Unicode就好了。

¹你应该升级。