2011-06-22 12 views
0

この質問は、次の2つのシナリオを目指して: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()'ですか?ユニコード文字列を定義する! 'u"äöüáèô "' – phant0m

+0

@ phant0m、私は混乱しています。いずれにしても ''äöüáèô "' 'äöüáèô" .decode( 'utf8')と同じであることをお勧めしますか? – Aufwind

+0

はい、私の答えを見てください。詳しい説明については – phant0m

答えて

4

Pythonは最初の行または2行目でemacs/vimのようなエンコーディング仕様をチェックします。

より正確には、第一又は第二 線が正規 表現と一致しなければなりません "コーディング[=]([ - W \] +)\ S *" を。この 式の最初の グループは、エンコード名として解釈されます。コード がPythonに認識されていない場合、コンパイル時にエラーが発生します。

出典:PEP 263

(BOMもPythonがUTF-8としてソースを解釈するだろう

私は.decode('utf8')いずれにおいても

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

上で、あなたがこれを使用する、お勧めします。場合、special_char_stringunicodeオブジェクトを含み、もはやstrを含みません。 ご覧のとおり、they'r電子両方の意味的に等価:

>>> 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を使用している場合、それは文字通りのユニコードがあることをパーサに指示します、少し速くする必要があります。

+0

+1、ありがとう! – Aufwind

2

はい、これはPython 2.xの推奨方法です。PEP 0263を参照してください。 Python 3.x以降では、デフォルトのエンコーディングはUTF-8でASCIIではないので、そこには必要ありません。 PEP 3120を参照してください。