Python:Pythonソースコードの始まり-*-コーディング:utf-8-*-まさに何



Python Python Source Code Beginning Coding



問題のPythonコーディングの複雑さ、私はこれについての記事を書こうとしました 論文 、しかし、問題のいくつかの詳細は完全には明確ではないと常に感じていました。そこで、複雑な問題を1つずつ簡単な小さな質問に再構成することにしました。これは最初の記事の1つです。

プログラムがソースコードの1行目または2行目で非ASCII文字を正しく処理できるようにしたい場合は、次のような文を追加する必要があることをおそらく知っているPythonプログラムを作成します。



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

それらの1つutf-8他のコーディングに置き換えることができます。

記事は正確にどのような役割のフレーズで言われています。



コンピュータファイルは、種類に関係なく、その本質がコンピュータのバイナリデータに保存されていることを私たちは知っています。 Pythonのソースコードファイルも例外ではありません。

次のコマンドを実行すると、何が起こるかがわかります。

.py python source code file
  1. バイナリデータのPythonインタプリタプログラムのソースファイルがメモリに読み込まれます
  2. Pythonインタープリターはバイナリデータとしてメモリに読み込まれますPythonコード変換
  3. ソースファイルから変換された最終版を実行するPythonインタープリターPythonコード。

ここで最初の2つのステップは、使用する必要性# -*- coding: utf-8 -*-エンコードされた情報の内部です。これがその役割です。



ここでは、このプロセスの詳細をより明確にするために、具体的な例を示します。

まず、Pythonコードを記述します。

# -*- coding: utf-8 -*- s='Twenty-three' print(s)

そして、それをファイルとして保存します。
注意: ファイルエンコーディングを指定する必要がある場合は、ファイルを保存します。ここでは、ファイルを取得するためにUTF-8エンコーディングを使用します:t.py。

ファイルはディスクにバイナリ形式で保存されます。xxdコマンドの下でバイナリファイルを表示できます。

$ xxd t.py 00000000: 2320 2d2a 2d20 636f 6469 6e67 3a20 7574 # -*- coding: ut 00000010: 662d 3820 2d2a 2d0a 733d 27e4 ba8c e4b8 f-8 -*-.s='..... 00000020: 8927 0a70 7269 6e74 2873 290a .'.print(s).

ソースファイルを保存した後、natural python Commandを使用してプログラムを実行すると、次の3つのステップの最前線で実行されます。

  1. バイナリデータのPythonインタプリタプログラムのソースファイルがメモリに読み込まれます
  2. Pythonインタープリターはバイナリデータとしてメモリに読み込まれますPythonコード変換
  3. ソースファイルから変換された最終版を実行するPythonインタープリターPythonコード。

ステップ2を見ると、次はPythonインタープリターがファイルと取得したバイナリコンテンツt.pyを読み取ります。

23202d2a2d20636f64696e673a207574662d38202d2a2d0a733d27e4ba8c e4b889270a7072696e742873290a

したがって、問題は、これらのステートメントがpythonを実行するときに、コンテンツがどのようにエンコードされるかということです。このプロセスは前向きであり、逆にファイルを保存するときに行うことは、UTF-8エンコーディングを選択してからファイルを保存するときに、これらのバイナリコード化された情報の一部をpythonステートメントに従わせる必要があります。 、pythonインタープリターは最初にファイルコンテンツの最初の2行を読み取り(2進数を読み取るx0a行です)、次にpython2はデフォルトのエンコーディング(III] ,,)を使用してコンテンツをデコードし、通常の|を見つけます。 _ + _ |情報をデコードしてから、他のコンテンツの残りのコンテンツをデコードします(デコード情報を使用)。

情報が異なるデコーダーを使用してデコードされるため、情報をデコードする必要があるのはなぜですか。次のようなPythonステートメントの異なるコンテンツを取得します。
これは、gbkpythonソースコンテンツで使用されます。

-*- coding: utf-8 -*-

理解しやすい異なる結果を実行する異なるコードコンテンツに直面します。