все Python 3codecsпонятие
codecs.BOM_UTF8
метки порядка байтов (BOM)
Байты b'\xef\xbb\xbf' — сигнатура UTF-8 в начале файла. Её пишет Excel и Блокнот Windows; декодер 'utf-8' её не убирает, а 'utf-8-sig' — убирает.
Синтаксис
codecs.BOM_UTF8 # b'\xef\xbb\xbf'
Классическая ловушка CSV: первый заголовок читается как '\ufeffid', и row['id'] даёт KeyError, хотя в редакторе всё выглядит верно. Лечится open(..., encoding='utf-8-sig') — он снимет BOM, если тот есть, и прочитает файл без BOM как обычно. При записи CSV для Excel тот же 'utf-8-sig' поставит BOM, и кириллица откроется без кракозябр.
Примеры
import codecs
data = codecs.BOM_UTF8 + 'id;name'.encode('utf-8')
print(repr(data.decode('utf-8').split(';')[0])) # → '\ufeffid'
print(data.decode('utf-8-sig').split(';')[0]) # → id
print(data.startswith(codecs.BOM_UTF8)) # → True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности