Вышедший 9 октября Python 3.15 внедрил стандарт PEP 686, сделав UTF-8 кодировкой по умолчанию. Это изменение затрагивает функцию open(), вызовы subprocess и стандартные потоки, которые ранее использовали системную локаль для определения кодировки.
Приложения, работающие с устаревшими форматами вроде cp1251 (выгрузки из 1С, банковские выписки), могут столкнуться с ошибками или искажением данных, если кодировка не указана явно. В некоторых случаях скрипты могут завершаться с ошибкой UnicodeDecodeError, в других — записывать некорректные файлы без уведомлений.
Для поиска проблем рекомендуется использовать флаг -X warn_default_encoding, который выводит предупреждения при открытии файлов без указания кодировки. Также для статического анализа кода можно применять правило PLW1514 в линтере ruff.
Основным решением является явное указание параметра encoding. Для внешних файлов следует прописывать актуальную кодировку, например cp1251, а для внутренних — utf-8. В качестве временной меры для сохранения обратной совместимости можно использовать переменную окружения PYTHONUTF8=0.




