1. ホーム
  2. パイソン

[解決済み】テキストのエンコードを判断する方法は?

2022-04-04 10:43:51

質問

エンコードされたテキストを受け取りましたが、どのような文字セットが使用されているのかわかりません。Pythonを使用してテキストファイルのエンコーディングを判断する方法はありますか? テキストファイルのエンコーディング/コードページを検出する方法 はC#を扱います。

どのように解決するのですか?

EDIT: chardetはメンテナンスされていないようですが、ほとんどの回答が当てはまります。チェック https://pypi.org/project/charset-normalizer/ 代替案として

エンコーディングを常に正しく検出することは 不可能 .

(シャルデFAQより)

しかし、いくつかのエンコーディングは、最適化されています。 特定の言語のために、そして言語 はランダムではありません。ある文字 が常に出現し、一方 他の配列は意味をなさない。A 英語に堪能な人が 新聞に「txzqJv 2!dasd0a」と書かれているのを見つけた。 QqdKjvz "は瞬時に認識されるでしょう。 それは英語ではありません(たとえそれが 英字だけで構成されています)。 たくさんの「典型的な」テキストを研究することで コンピュータのアルゴリズムは、このようなことをシミュレートすることができます。 流暢に話すことができ、経験豊かな を推測することができます。

があります。 シャルデ chardetはMozillaの自動検出コードを移植したものです。

を使用することもできます。 ユニコードダミット . 以下の方法で試行します。

  • ドキュメント自体で発見されたエンコーディング:例えば、XML宣言や(HTMLドキュメントの)http-equiv METAタグの中で発見されました。Beautiful Soupは、ドキュメント内でこの種のエンコーディングを見つけた場合、ドキュメントを最初からもう一度解析し、新しいエンコーディングを試します。唯一の例外は、あなたが明示的にエンコーディングを指定し、そのエンコーディングが実際に機能した場合です:その場合、ドキュメント内で見つけたエンコーディングはすべて無視されます。
  • ファイルの最初の数バイトを見て、嗅ぎつけたエンコーディング。この段階でエンコーディングが検出された場合、UTF-* エンコーディング、EBCDIC、ASCII のいずれかになります。
  • によって嗅ぎつけられたエンコーディングは シャルデ ライブラリがインストールされていれば、それを使用します。
  • UTF-8
  • Windows-1252