我应该默认使用Unicode字符串吗?

时间:2009-07-12 17:13:22

标签: python unicode

在Python中编码时,在常规字符串中选择Unicode字符串是一种好习惯吗?我主要在Windows平台上工作,目前大多数字符串类型都是Unicode(即.NET String,'_UNICODE'默认在新的c ++项目中打开,等等)。因此,我倾向于认为使用非Unicode字符串对象的情况是一种罕见的情况。无论如何,我很好奇Python从业者在现实世界的项目中做了什么。

6 个答案:

答案 0 :(得分:19)

从我的练习 - 使用unicode。

在一个项目开始时,我们使用了usuall字符串,但是我们的项目正在增长,我们正在实现新功能并使用新的第三方库。在那个带有非unicode / unicode字符串的混乱中,一些函数开始失败。我们开始花时间本地化这些问题并修复它们。但是,一些第三方模块不支持unicode,并在我们切换到它后开始失败(但这是排除规则)。

当我们需要重写某些第三方模块(例如SendKeys)时,我也有一些经验,因为它们不支持unicode。如果它从一开始就以unicode完成,那将会更好:)

所以我认为今天我们应该使用unicode。

P.S。所有那些混乱只是我的hamble意见:))

答案 1 :(得分:13)

当你问这个问题时,我想你使用的是Python 2.x.

Python 3.0在字符串表示中发生了很大变化,现在所有文本都是unicode 我会在任何新项目中使用unicode - 与切换到Python 3.0的方式兼容(参见details)。

答案 2 :(得分:13)

是的,使用unicode。

一些提示:

  1. 当以任何二进制格式输入输出时,在读取之后直接解码并在写入之前直接编码,这样您就不需要混合字符串和unicode。因为混合往往会导致UnicodeEncodeDecodeErrors迟早。

  2. [忘了这个,我的解释让它更令人困惑。移植到Python 3时只是一个问题,你可以关心它。]

  3. Unicode的常见Python新手错误(不是说你是新手,但新手可能会读到):不要混淆编码和解码。请记住,UTF-8是一种编码,因此您将Unicode编码为UTF-8并从中进行编码。

  4. 不要陷入将Python中的默认编码(通过sitecustomize.py中的setdefaultencoding或类似设置)设置为最常用的内容的诱惑。如果您重新安装或移动到另一台计算机或突然需要使用其他编码,这只会给您带来问题。明确。

  5. 请记住,并非所有Python 2s标准库都接受unicode。如果你提供一个方法unicode并且它不起作用,但它应该,尝试喂它ascii并查看。示例:urllib.urlopen(),如果您为其提供unicode对象而不是字符串,则会因无效错误而失败。

  6. 嗯。这就是我现在所能想到的一切!

答案 3 :(得分:6)

在Python 2.x中始终如一地使用unicode字符串可能会很棘手 - 不管是因为有人无意中使用了更自然str(blah)的意思unicode(blah),忘记了u前缀字符串文字,第三方模块不兼容 - 无论如何。所以在Python 2.x中,只有在必要时才使用unicode,并准备提供良好的单元测试覆盖率。

如果您可以选择使用Python 3.x,那么您无需关心 - 字符串将是unicode而无需额外的努力。

答案 4 :(得分:4)

除了Mihails评论之外,我会说:使用Unicode,因为它是未来。在Python 3.0中,非Unicode将会消失,而且据我所知,所有“U”-Prefix都会遇到麻烦,因为它们也已经消失了。

答案 5 :(得分:2)

如果您正在处理严重受限的内存或磁盘空间,请使用ASCII字符串。在这种情况下,您还应该用C语言编写软件或更紧凑的东西:)