Python Glossary English

все 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Сообщить о неточности