これはどこから来るのですか:-*-コーディング:utf-8-*-


135

Pythonは以下をファイルのエンコーディングを定義する命令として認識します:

# -*- coding: utf-8 -*-

私は確かにこの種の指示を見ました(-*- var: value -*-)。それはどこから来たのですか?完全な仕様は何ですか?たとえば、値にスペース、特殊記号、改行、それ-*-自体を含めることができますか?

私のプログラムはプレーンテキストファイルを書き込みますが、この形式を使用してそれらにメタデータを含めたいと思います。


3
これは覚えやすく、私のエディターであるPyCharmで機能します。# coding: utf-8
crizCraig 2012

2
を使用# coding: utf8すると、PyCharmの外でも、Python 2.7でそのまま使用できます。(私はSublimeTextを使用しています)。
Basj 2018


1
@Cbhiheこの質問はPythonに関するものではなく、命令の機能や動作に関するものではありません。それは、どのPython以前のソフトウェアがそれを発明したのか、そしてそれだけでファイルエンコーディング以外のものがあるのか​​を尋ねています。
hamstergene

回答:


89

Pythonファイルのエンコーディングを指定するこの方法は、PEP 0263-Pythonソースコードエンコーディングの定義に由来しています。

これは、GNU Emacs(Python言語リファレンス、2.1.4エンコーディング宣言を参照)でも認識されますが、その構文を使用した最初のプログラムであったかどうかはわかりません。


4
Emacsマニュアルから結論付けられることから、値は任意のLISP式、特に二重引用符で囲まれた文字列にすることができます
hamstergene

pepリンクをありがとう。以前は、このディレクティブはテキストエディタでのみ使用されているという印象を受けました。これまで、コメントがファイルの最初の2行にある場合、Pythonインタープリターが実際にコメントを解析したことを知りませんでした。
梅干し2014

14

# -*- coding: utf-8 -*-Python 2のものです。Python 3以降では、ソースファイルのデフォルトのエンコーディングはすでにUTF-8であり、その行は役に立ちません。

参照:Python 3でエンコーディング宣言を使用する必要がありますか?

pyupgradeは、コードで実行して、すべてのクラスがから継承するように、Python 2からこれらのコメントやその他の不要になった残り物を削除するためのツールですobject


8

これはいわゆるファイルローカル変数であり、Emacsによって理解され、それに応じて設定されます。Emacsマニュアルの対応するセクションを参照-ファイルのヘッダーまたはフッターのいずれかで定義できます。


この特定のタイプのファイルローカル変数は、Pythonインタープリター自体によっても理解されます。これは、テキストエディター専用ではありません。stackoverflow.com/questions/41680533/...
ボリス

4

PyCharmでは省略します。下部にあるUTF-8インジケーターをオフにし、エンコーディングがハードコーディングされていることを警告します。上記のPyCharmコメントが必要だとは思わないでください。


実際、このような行test1 = 'äöü'を追加すると、そのようなヘッダーをファイルに追加するように指示されます。(pycharm 2019.1)
Eye

@Cutton EyeはPython 2または3を使っているのですか?
ボリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.