何时应该使用Unicode字符串?

4

我在考虑在Python 2.7和我的Django应用程序中何时使用Unicode字符串。

是否使用约定俗成的u'一些字符串'作为每个字符串的好习惯?

例如:

// 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'),
)

?


从性能的角度来看,可能没有正确的答案,但使用常规字符串会更有效率。因此,除非您实际上在使用ASCII范围之外的字符,否则我建议您坚持使用常规字符串。 - Aya
2个回答

4

在涉及到文本的地方,我建议您使用Unicode编码。您永远不知道Jürgen、Søren或Joël是否会在您的应用程序中展示他们的œuvre。

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


2
您可以在应用程序内部的任何地方使用 Unicode 编码。但是,当涉及输入/输出时,您需要注意一些问题。
其中一个问题是编码的多字节性质;一个 Unicode 字符可以由多个字节表示。如果您想以任意大小的块(例如 1K 或 4K)读取文件,则需要编写错误处理代码来捕获仅在块末尾读取了单个 Unicode 字符的部分字节的情况。一种解决方案是将整个文件读入内存,然后执行解码操作,但这会阻止您使用极大的文件;如果您需要读取 2Gb 的文件,则需要 2Gb 的 RAM。(实际上需要更多,因为至少一段时间内需要同时将编码字符串和其 Unicode 版本保存在内存中。)
根据 HOWTO中的最重要提示:
最重要的提示是:
软件应仅在内部使用 Unicode 字符串,在输出时转换为特定的编码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接