Python 2/3を使用してANSIおよびUTF-16LEファイルを解析する最良の方法は?

StackOverflow https://stackoverflow.com/questions/819396

  •  03-07-2019
  •  | 
  •  

質問

ANSIまたはUTF-16LEでエンコードされたファイルのコレクションがあります。正しいエンコーディングを使用してファイルを開くようにPythonにお願いします。問題は、UTF-16leを使用してエンコードした場合、ANSIファイルは例外を発生させないことです。逆も同様です。

正しいファイルエンコーディングを使用してファイルを開く簡単な方法はありますか?

役に立ちましたか?

解決

エンコードを検出するには、 chardet ライブラリを使用します。

他のヒント

BOM を最初に確認できますファイルがUTFかどうかを確認します。

その後、 unicode.decode に応じて(< href = "http://docs.python.org/library/codecs.html#standard-encodings" rel = "nofollow noreferrer">標準エンコーディング)。

編集 または、多分、文字列s.decode( 'ascii')を試してください(sが変数名である場合)。 UnicodeDecodeErrorをスローする場合は、「utf_16_le」としてデコードします。

ファイルには何が含まれていますか?ラテン語ベースのアルファベットのプレーンテキストの場合、UTF-16LEファイルのほぼすべてのバイトはゼロになります。一方、windows-1252ファイルでは、ゼロが表示されることはまったくありません。たとえば、windows-1252の&#8220; Hello&#8221; は次のとおりです。

93 48 65 6C 6C 6F 94

...およびUTF-16LEの場合:

1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20

中引用符は別として、各文字は同じ値にマップされ、末尾にゼロバイトが追加されます。実際、これはISO-8859-1文字セットのすべての文字に当てはまります(windows-1252はISO-8859-1を拡張して、いくつかの印刷文字のマッピングを追加し、中かっこなどの制御文字を置き換えます)範囲 0x80..0x9F )。

すべてのファイルがwindows-1252またはUTF-16LEのいずれかであることがわかっている場合、ゼロをすばやくスキャンするだけで、どれがどれであるかを判断できます。シャルデットが非常に遅くて複雑であるのには十分な理由がありますが、この場合、迅速で汚れた状態で逃げることができると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top