Python Glossary English

все Python 3codecsпонятие

codecs.BOM_UTF32_LE

метки порядка байтов (BOM)

Байты b'\xff\xfe\x00\x00' — метка порядка байтов UTF-32 little-endian. Начинается теми же двумя байтами, что BOM_UTF16_LE.

Синтаксис

codecs.BOM_UTF32_LE  # b'\xff\xfe\x00\x00'

Главная ловушка — порядок проверок: data.startswith(BOM_UTF16_LE) истинно и для UTF-32 LE, и файл распознаётся как UTF-16. Проверять надо от длинной метки к короткой. Сама кодировка UTF-32 на практике редкость: 4 байта на любой символ. Устаревшее имя BOM64_LE — тот же объект.

Примеры

import codecs
def sniff(data):
    for bom, enc in [(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')]:
        if data.startswith(bom):
            return enc
    return 'utf-8'
print(sniff(codecs.BOM_UTF32_LE + 'hi'.encode('utf-32-le')))  # → utf-32
print(sniff('hi'.encode('utf-16')))  # → utf-16

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности