我什么时候应该使用Unicode字符串?

时间:2013-04-30 11:59:06

标签: python django unicode

我在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'),
)

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

您可以在应用程序内部的任何位置使用unicode编码。但是,在进/出时你可能会注意。

  

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

根据HOWTO

最重要的提示
  

最重要的提示是:

     

软件应仅在内部使用Unicode字符串进行转换   输出上的特定编码。