我在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'),
)
答案 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字符串进行转换 输出上的特定编码。