ОПЕРАЦИЯ · КОДИРОВКИ
Определить кодировку с оговорками
Проверить BOM и возможность строгого чтения UTF-8.
Предварительные условия
Python 3; небольшой файл input.txt.
Команда
python3 - <<'PY'
from pathlib import Path
b = Path("input.txt").read_bytes()
for mark, label in [(b"\xff\xfe\x00\x00", "UTF-32 LE"), (b"\x00\x00\xfe\xff", "UTF-32 BE"), (b"\xef\xbb\xbf", "UTF-8 BOM"), (b"\xff\xfe", "UTF-16 LE"), (b"\xfe\xff", "UTF-16 BE")]:
if b.startswith(mark):
print(label); break
else:
try: b.decode("utf-8"); print("Совместим с UTF-8; это не доказательство")
except UnicodeDecodeError: print("Не UTF-8; нужна информация источника")
PYОбъяснение аргументов
Длинные BOM проверяются раньше коротких; decode использует строгий режим.
Ожидаемый результат
Предположение с указанием основания, без автоматической перекодировки.
Проверка
Сопоставьте с документацией источника и известными не-ASCII словами.
Распространённые ошибки
- ASCII совместим со многими кодировками; эвристика не является гарантией.
Обратимость
Без изменений.