Pythonライブラリに、BOMの存在を探すことでファイルの文字エンコードを返す関数があるかどうか疑問に思いました。
私はすでに何かを実装しましたが、私は車輪の再発明をしているのではないかと心配しています
更新:(ジョン・マチンの修正に基づく):
import codecs
def _get_encoding_from_bom(fd):
first_bytes = fd.read(4)
fd.seek(0)
bom_to_encoding = (
(codecs.BOM_UTF32_LE, 'utf-32'),
(codecs.BOM_UTF32_BE, 'utf-32'),
(codecs.BOM_UTF8, 'utf-8-sig'),
(codecs.BOM_UTF16_LE, 'utf-16'),
(codecs.BOM_UTF16_BE, 'utf-16'),
)
for bom, encoding in bom_to_encoding:
if first_bytes.startswith(bom):
return encoding
return None