【问题标题】:What's the preferred way to include unicode in python source files?在 python 源文件中包含 unicode 的首选方法是什么?
【发布时间】:2014-05-28 13:23:02
【问题描述】:

在源代码中使用 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 开发人员的辛勤工作。

【问题讨论】:

  • 其余的主要是基于意见的,我担心。 u1u3u4 在我看来不是我曾经考虑过的。 u2u5 对我来说,u2 不太容易受到其他人错误配置他们的文本编辑器的影响,但只能在它之后使用注释来解释它代表什么代码点,如果这样的非 ASCII 代码点相对很少见。

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


【解决方案1】:

我认为我最常用的方式(在 Python 2 中)是:

# coding: utf-8

text = u'résumé'
  • 文本可读。与text = u'r\u00e9sum\u00e9' 相比,我必须在其中查找那是什么字符。其他所有内容的可读性都较差。
  • 如果您使用的是 Unicode,那么您的变量肯定是文本,而 不是 二进制数据,因此将其保存在 unicode 对象以外的任何地方都没有任何意义。 (以防万一'€' 成为一个选项。)

from __future__ import unicode_literals改变程序的解析方式;我认为您需要更加了解文本和二进制数据之间的区别。 (如果你问我,大多数程序员都不擅长的东西。)

在大型项目中,仅更改一个文件的解析模式可能会令人困惑,因此最好将其作为所有文件或无文件,这样您就不需要参考文件头。如果您使用的是 Python 2,则默认设置可能是关闭的,除非您还针对 Python 3。如果您的目标是 Python 2.5 或更早版本¹,那么它不是一个选项。

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

¹您应该升级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多