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


114

Python 3は、デフォルトでソースコードファイルにUTF-8エンコーディングを使用します。すべてのソースファイルの先頭でエンコード宣言を使用する必要がありますか?お気に入り# -*- coding: utf-8 -*-

回答:


112

デフォルト UTF-8であるその宣言を使用する必要があるのは、デフォルトから逸脱した場合、または他のツール(IDEやテキストエディターなど)に依存してその情報を利用する場合のみです。

つまり、Pythonに関する限り、、異なるエンコーディングを使用する場合にのみ、その宣言を使用する必要があります。

エディターなどの他のツールでも同様の構文をサポートできます。そのため、PEP 263仕様では、構文にかなりの柔軟性を持たせることができます(コメントであるcoding必要があり、テキストがそこにあり、その後に:または=文字とオプションの空白が続きます。認識されたコーデックが後に続きます)。

これは、Python がソースコードを読み取る方法にのみ適用されることに注意してください。これはそのコードの実行には適用されないため、印刷、ファイルのオープン、またはその他のI / O操作がバイトとUnicodeの間でどのように変換されるかには適用されません。Python、Unicode、およびエンコーディングの詳細については、Python Unicode HOWTOまたはNed Batchelderによる非常に徹底的なPragmatic Unicode講演を読むことを強くお勧めします。


28
# -*- coding: utf-8 -*-ソースファイルを編集するとき、依然として予想符号化への切り替えを、いくつかのエディタのために有用であり得ます。
PEPrと

1
@peprバイトオーダーマークでも同じことができますか?
endolith

12
@endolith:UTF-8 BOMは、Microsoftが生み出した、この地球上で醜態を参照してください..ですen.wikipedia.org/wiki/Byte_order_mark#UTF-8
マルタインピータース

1
@MartijnPietersあなたのリンクはあなたに同意していないようだ
endolith

2
@endolith:いいえ、WPの記事は背景のみを要約したものであり、それは忌まわしいものであると私自身の意見です。BOMのポイントは、バイトオーダーを記録することです(そのため、バイトオーダーマークという名前です)。UTF-8ではバイト順の混乱はありません。UTF-16とUTF-32でのみその機能があります。値はすでに再利用されたゼロ幅の改行なしスペース文字です(偶発的な印刷が完全に非表示の出力になるため便利です)。これを魔法の定数として再利用するのは間違っていると私は考えています。
Martijn Pieters

6

いいえ、次の場合:

  • プロジェクト全体UTF-8は、デフォルトであるのみを使用します。
  • そして、IDEツールが各ファイルでそのエンコーディング宣言を必要としないことを確信しています。

はい、もし

  • プロジェクトが異なるエンコーディングに依存している
  • または多くのエンコーディングに依存しています。

マルチエンコーディングプロジェクトの場合:

一部のファイルがでエンコードされている場合non-utf-8、これらのエンコードされたファイルでもUTF-8、ゴールデンルールは次のとおりであるため、エンコード宣言も追加する必要があります。Explicit is better than implicit.

参照:

  • PyCharmはその宣言を必要としません:

pycharmで特定のファイルのエンコーディングを構成する

  • vimはその宣言を必要としませんが、
# vim: set fileencoding=<encoding name> :
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.