2011-06-22 33 views
0

這個問題的目的是在以下兩種情況:如何處理註釋中的特殊字符和python文件中的硬編碼字符串?

  1. 你想有特殊字符添加一個字符串變量:

    special_char_string = "äöüáèô"

  2. 要允許在註釋中的特殊字符。

    # This a comment with special characters in it: äöà etc.

目前,我處理這個問題是這樣的:

# -*- encoding: utf-8 -*- 
special_char_string = "äöüáèô".decode('utf8') 
# This a comment with special characters in it: äöà etc. 

工作正常。

這是推薦的方式嗎?或者有更好的解決方案嗎?

+1

爲什麼'.decode()'?定義一個unicode字符串! 'u「äöüáèô」' – phant0m

+0

@ phant0m,我很困惑。你是否建議,在任何情況下,'u'äöüáèô「'和''äöüáèô'.decode'('utf8')'一樣? – Aufwind

+0

是的,請看我的答案。 – phant0m

回答

4

Python會檢查第一行或第二行的emacs/vim-like編碼規範。

更精確地,第一或第二 線必須與正則表達式 匹配 「編碼[:=] \ S *( - + [\瓦特])」。然後將該 表達式的第一個 組解釋爲編碼名稱。如果Python未知編碼 ,則在編譯期間會出現錯誤。

來源:PEP 263

(A BOM也使Python解釋來源爲UTF-8

我會建議你使用這種過度.decode('utf8')

# -*- encoding: utf-8 -*- 
special_char_string = u"äöüáèô" 

在任何那麼,special_char_string將包含一個unicode對象,不再是str。 正如你所看到的,他們是Ë兩個語義上等效:

>>> u"äöüáèô" == "äöüáèô".decode('utf8') 
True 

和反向:

>>> u"äöüáèô".encode('utf8') 
'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\xa1\xc3\xa8\xc3\xb4' 
>>> "äöüáèô" 
'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\xa1\xc3\xa8\xc3\xb4' 

存在技術差異,但是:如果你使用U「東西」,它會指示解析器,有文字爲Unicode ,它應該快一點。

+0

+1的詳細解釋,謝謝! – Aufwind

2

是的,這是Python 2.x的推薦方式,請參閱PEP 0263。 在Python 3.x及以上版本中,默認的編碼是UTF-8而不是ASCII,所以你不需要它。見PEP 3120

相關問題