【问题标题】:When should I use Unicode string?什么时候应该使用 Unicode 字符串?
【发布时间】:2013-04-24 08:13:45
【问题描述】:

我反映何时应该在 Python 2.7 和我的 django 应用程序中使用 Unicode 字符串。

每个字符串使用约定 u'some string' 是个好习惯吗?

例如:

// models.py
# -*- coding: UTF-8 -*-
class ModelClass(models.Model)
   field_name = models.ForeignKey(SomeModel, related_name=u'some_models')
   # ...

       class Meta:
          ordering = (u'created', u'name',)

和

// urls.py
# -*- coding: UTF-8 -*-
urlpatterns = patterns(u'',
    url(r'^a/$', views.some_view(), name=u'a'),
    url(r'^b/(?P<pk>[0-9]+)/$', views.some_view2(), name=u'b'),
)

?

【问题讨论】:

  • 这可能没有正确答案,但从性能 POV 来看,使用常规字符串会更有效。因此,除非您实际上使用的是 ASCII 范围之外的字符,否则我会坚持使用常规字符串。

标签: python django unicode


【解决方案1】:

IMO 你应该在任何有文本的地方使用 Unicode。您永远不知道 Jürgen、Søren 或 Joël 是否会在您的申请中展示他们的œuvre。

当您有数据要传输到另一个进程或文件时,您应该将它们分别作为常规字符串 (Py2)。 bytes() 对象 (Py3)。为了识别这些领域之间的接口,您必须小心一点。

【讨论】:

    【解决方案2】:

    您可以在应用程序内部的任何地方使用 unicode 编码。但是,当涉及到输入/输出时,您可能会注意。

    一个问题是编码的多字节性质;一个统一码 字符可以用几个字节表示。如果你想阅读 以任意大小的块(例如,1K 或 4K)的文件,您需要编写 错误处理代码以捕获只有部分字节的情况 编码单个 Unicode 字符在块的末尾读取。 一种解决方案是将整个文件读入内存,然后 执行解码,但这会阻止您处理文件 非常大;如果您需要读取 2Gb 文件,则需要 2Gb 内存。 (更多,真的,因为至少有一段时间你需要 编码字符串及其在内存中的 Unicode 版本。)

    HOWTO 最重要的提示

    最重要的提示是:

    软件只能在内部使用 Unicode 字符串,将 输出到特定的编码。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 2014-06-10
      • 2023-04-02
      • 2011-04-15
      • 2017-04-10
      • 2012-03-19
      • 2018-05-12
      • 2018-12-11
      • 1970-01-01
      相关资源
      最近更新 更多