2013-04-30 31 views
4

我反映什麼時候應該在Python 2.7和我的django應用程序中使用Unicode字符串什麼時候應該使用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

這可能沒有正確的答案,但從性能POV來說,使用常規字符串會更有效。所以,除非你實際使用ASCII範圍以外的字符,否則我會堅持使用常規字符串。 – Aya 2013-04-30 12:06:05

回答

4

國際海事組織你應該使用Unicode無論你有文本。你永遠不知道Jürgen,Søren或Joël是否會在你的應用環境中展示他們的œuvre

當您將數據傳輸到另一個進程或文件時,應該將它們作爲常規字符串(Py2)進行響應。 bytes()對象(Py3)。爲了確定這些領域之間的接口,你必須小心一點。

2

您可以在內部的應用程序中隨處使用unicode編碼。但是,當涉及In/Out時,您可能會注意。

一個問題是編碼的多字節性質;一個Unicode 字符可以由幾個字節表示。如果您想要以任意大小的塊(比如1K或4K)讀取 文件,則需要編寫 錯誤處理代碼來捕獲只讀取編碼單個Unicode字符的部分字節 的情況塊的結尾。 一個解決方案是將整個文件讀入內存,然後 執行解碼,但這會阻止您使用非常大的文件 ;如果您需要讀取2Gb文件,則需要RAM的2Gb 。 (更多,真的,因爲至少在那一刻你需要有 編碼字符串和Unicode版本在內存兩者。)

最重要的祕訣根據HOWTO

最重要提示是:

軟件只能在內部使用Unicode字符串,將 轉換爲輸出中的特定編碼。

相關問題