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