# -*- coding: gbk -*-
このようなステートメントは、Python でソース ファイルの文字エンコード形式を指定するために使用され、通常、このステートメントは Python ソース ファイルの 1 行目または 2 行目 (コメントの後) に表示されます。
効果
Python はデフォルトで ASCII エンコードを使用してソース コードを解析するため、ソース ファイルに非 ASCII エンコード文字 (漢字など) が含まれている場合、インタープリタは SyntaxError 例外をスローする可能性があります。このようなコメント文を追加すると、# -*- coding: gbk -*-
現在のソース ファイルの文字エンコード形式が GBK であることをインタプリタに伝えることができ、ソース ファイルの漢字が誤って解析されるのを防ぐことができます。
原理
Python がソース コードを解析するとき、最初にソース ファイルの最初の数バイトを読み取り、BOM (バイト オーダー マーク) が含まれているかどうかを判断します。BOM がある場合、ファイルはそのエンコード形式に従って解析されます。 BOM; 指定されたエンコード形式はファイルを解析します。エンコード形式が指定されていない場合は、デフォルトの ASCII エンコード形式がファイルの解析に使用されます。
# -*- coding: XXX -*-
このようなコメント ステートメントがソース ファイルに含まれている場合、インタプリタはこのステートメントによって提供されるエンコード形式に従ってソース ファイルを解析します。
- - コーディング: utf8 - - それは何ですか?
# -*- coding: utf8 -*-
と の# -*- coding: gbk -*-
機能は同じで、どちらもソース ファイルの文字エンコード形式を指定するために使用されます。ただし、一方が UTF-8 エンコード形式で、もう一方が GBK エンコード形式である点が異なります。Python 3 では# -*- coding: utf-8 -*-
デフォルトで UTF-8 エンコード形式が使用されるため、ソース ファイルの文字エンコード形式を指定することをお勧めします。
両者の違いは何ですか?
GBK と UTF-8 はどちらもマルチバイト エンコード形式ですが、エンコード方法が異なります。
GBK エンコード方式は 2 バイト エンコードを採用しており、各漢字は 2 バイトを占有しますが、UTF-8 エンコード方式は可変長エンコードを採用しており、通常、漢字は位置に応じて 3 ~ 4 バイトを占有します。
したがって、コードに大量の中国語の文字が含まれている場合は、GBK エンコード形式を使用するとファイルがよりコンパクトになり、コードの行数が少なくなりますが、UTF-8 を使用すると、コードの実行に失敗するエンコードの問題を回避できます。 UTF-8 はユニバーサルエンコーディングであるため、実行してください。
代替方法
# -*- coding: XXX -*-
このようなコメント ステートメントをソース ファイルの先頭に追加する以外に、次の代替手段があります。
1. open() 関数を使用してファイルを開くときに、エンコード形式を指定します。
with open("filename", "r", encoding="gbk") as f:
# 读取文件内容
2. ソース ファイルの文字エンコーディング形式を Python のデフォルトの UTF-8 エンコーディングに変換します。
source = open("filename", encoding="gbk").read().encode("utf-8")
exec(source.decode("utf-8"))
その他の知識ポイント
1.BOM
BOM (バイト オーダー マーク) は、Unicode 文字エンコーディング標準で文字ストリームのシーケンスを識別するために使用される特殊文字で、通常は Unicode テキスト ファイルの先頭に 0xFEFF の形式で表示されます。Python では、ソース ファイルに BOM が含まれている場合、インタープリターは BOM で指定されたエンコード形式に従ってソース ファイルを解析します。
2. コード変換
Python では、str.encode()
およびメソッドを使用してbytes.decode()
エンコード変換を行うことができます。たとえば、文字列を GBK エンコードされたバイト文字列に変換します。
s = "中文"
b = s.encode("gbk")
GBK でエンコードされたバイト文字列を Unicode 文字列に変換します。
b = b"\xd6\xd0\xce\xc4"
s = b.decode("gbk")
3.ユニコード
Unicode は、すべての既知の文字、記号、顔文字を含む文字セットであり、各文字には固有の Unicode コードがあります。Python では、文字列はデフォルトで Unicode でエンコードされます。
要約する
Python のステートメント# -*- coding: XXX -*-
を使用して、ソース ファイルの文字エンコード形式を指定し、ソース ファイル内の中国語の文字が正しく解析されないようにできます。このようなコメント文をソースファイルの先頭に追加するだけでなく、open()関数を使用してファイルを開くときにエンコード形式を指定したり、ソースファイルの文字エンコード形式をPythonのデフォルトのUTFに変換したりすることもできます。 8エンコーディング。エンコードの問題に対処するときは、BOM、エンコード変換、Unicode などの関連知識ポイントも理解する必要があります。
ステートメントを使用して文字エンコード形式を指定する場合、ソース ファイルの 1 行目または 2 行目に必ず出現する必要があり、# -*- coding: XXX -*-
コメント記号#
の後に他の文字やスペースがあってはなりません。同時に、エンコード形式を選択する際には、エンコード変換などの問題を回避するために、実際の状況に応じて選択する必要もあります。
つまり、Python 開発においてコーディングの問題は避けられない問題であり、関連する知識ポイントを深く理解し、適切な解決策を採用することによってのみ、プロジェクトの開発とデプロイメントを正常に完了することができます。