Pythonソースコードにおける符号化宣言文字列の役割

707 ワード

詳細
Pythonのソースコードヘッダの#encoding:utf 8の文字列はpythonの実際の符号化解析に影響しないと考えられていた.
しかし、今日は面白い問題を見つけました.Markちょっと.
pythonのコードにu'中国語'のような文字列が存在する場合、utf 8符号化でpyファイルにローカルに保存されていると仮定すると、u'xe 4xb 8xadxe 6x 96x 87'のような実際のローカル符号化で保存される.
符号化宣言文字列が#encoding:utf 8の場合.
では、使用時には何の影響もありません.
ただし、宣言文字列を符号化する際に#encoding:gbkを使用する
ではimport moduleを実行するとき、pythonはgbk符号化を利用してこのu'xe 4xb 8xadxe 6x 96x 87'を解析しようとしますが、実行の結果は当然エラーになります.
 
SyntaxError: 'gbk' codec can't decode bytes in position 2-3: invalid data (encode.py, line 2)

 
#encoding:utf 8の場合、この文字列はu'u 4 e 2 du 6587'に解析されます.通常のunicode文字列のように使用できます.