在源代码中使用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的辛勤工作开发者。
答案 0 :(得分:2)
我认为我使用过的最常见的方法(在Python 2中)是:
# coding: utf-8
text = u'résumé'
text = u'r\u00e9sum\u00e9'
比较,我必须在哪里查找它是什么字符。其他一切都不太可读。unicode
对象之外的任何内容中都没有意义。 (以防'€'
成为一种选择。) from __future__ import unicode_literals
更改程序的解析模式;我想你需要更多地意识到文本和文本之间的区别。二进制数据。 (有些东西,如果你问我,大多数程序员都不擅长。)
在大型项目中,仅针对一个文件更改解析模式可能会令人困惑,因此它可能更好地作为所有文件或没有文件,因此您不需要引用文件头。如果您使用的是Python 2,则默认情况下可能会关闭,除非您还要针对Python 3.如果您的目标是Python 2.5或更早的¹,那么它不是一个选项。
如今,大多数编辑都支持Unicode。也就是说,我看过编辑器损坏了文件中的非ASCII字符,但极少;如果此类提交的作者没有充分审查他的代码,代码审查应该抓住这一点。 (差异很明显。)不值得支持这些人:Unicode就在这里;跟踪他们并修复他们的设置。值得注意的是,vim
处理Unicode就好了。
¹你应该升级。