4

我反思何时应该在 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'),
)

?

4

2 回答 2

4

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

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

于 2013-04-30T12:17:35.923 回答
2

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

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

根据HOWTO最重要的提示

最重要的提示是:

软件只能在内部使用 Unicode 字符串,在输出时转换为特定的编码。

于 2013-04-30T12:05:26.663 回答