PythonでテキストファイルがUTF-8かどうかを認識する方法はありますか?
ファイルがUTF-8かどうかを知りたいです。他のエンコーディングを検出する必要はありません。
PythonでテキストファイルがUTF-8かどうかを認識する方法はありますか?
ファイルがUTF-8かどうかを知りたいです。他のエンコーディングを検出する必要はありません。
コメントで、UTF-8 を検出するだけでよいと述べました。代替手段が 1 バイト エンコーディングのみで構成されていることがわかっている場合は、多くの場合に機能する解決策があります。
UTF-8 または のような 1 バイト エンコーディングであることがわかっている場合はlatin-1
、最初に UTF-8 で開き、次に別のエンコーディングで開いてみてください。ファイルに ASCII 文字のみが含まれている場合、別のエンコーディングとして意図されていたとしても、UTF-8 で開かれてしまいます。ASCII 以外の文字が含まれている場合、ほとんどの場合、2 つの文字セットの間で正しい文字セットが正しく検出されます。
try:
# or codecs.open on Python <= 2.5
# or io.open on Python > 2.5 and <= 2.7
filedata = open(filename, encoding='UTF-8').read()
except:
filedata = open(filename, encoding='other-single-byte-encoding').read()
あなたの最善の策は、直接またはBeautifulSoupchardet
から PyPI のパッケージを使用することです。UnicodeDamnit
シャルデ 1.0.1
ユニバーサル エンコーディング検出器
検出:
- ASCII、UTF-8、UTF-16 (2 種類)、UTF-32 (4 種類)
- Big5、GB2312、EUC-TW、HZ-GB-2312、ISO-2022-CN (繁体字および簡体字中国語)
- EUC-JP、SHIFT_JIS、ISO-2022-JP (日本語)
- EUC-KR、ISO-2022-KR (韓国語)
- KOI8-R、MacCyrillic、IBM855、IBM866、ISO-8859-5、windows-1251 (キリル文字)
- ISO-8859-2、windows-1250 (ハンガリー語)
- ISO-8859-5、windows-1251 (ブルガリア語)
- windows-1252 (英語)
- ISO-8859-7、windows-1253 (ギリシャ語)
- ISO-8859-8、windows-1255 (視覚的および論理的ヘブライ語)
- TIS-620(タイ語)
Python 2.1 以降が必要です
ただし、一部のファイルは複数のエンコーディングで有効であるためchardet
、万能薬ではありません。
確実に?いいえ。
一般に、バイト シーケンスは、それを解釈する方法を知らなければ意味がありません。これは、テキスト ファイルだけでなく、整数、浮動小数点数などにも当てはまります。
ただし、バイト オーダー マーク (存在する場合) とファイルの最初のチャンク (どのエンコーディングが最も適切な文字を生成するかを確認するため) を調べることで、ファイルのエンコーディングを推測する方法があります。ライブラリはこれchardet
に非常に優れていますが、かなり強力ではありますが、ヒューリスティックにすぎないことに注意してください。