Python Glossary English

все Python 3localeфункция

locale.getpreferredencoding()

кодировка

Возвращает кодировку, которую open() берёт для текстовых файлов без encoding=; в режиме UTF-8 это всегда 'utf-8'.

Синтаксис

locale.getpreferredencoding(do_setlocale=True)

Именно отсюда берётся «на Windows файл открылся в cp1251»: без encoding= open() спрашивает эту функцию, и одна программа читает файл по-разному на разных машинах. С 3.15 режим UTF-8 включён по умолчанию, и ответ стал 'utf-8' — но явный encoding='utf-8' остаётся единственным переносимым вариантом. Аргумент по умолчанию do_setlocale=True может временно вызвать setlocale(), а это не потокобезопасно — передавайте False.

Примеры

import locale
print(locale.getpreferredencoding(False))  # → ? utf-8 или cp1251 — зависит от машины
with open('note.txt', 'w', encoding='utf-8') as f:  # явная кодировка не зависит от машины
    f.write('привет')
with open('note.txt', encoding='utf-8') as f:
    print(f.read())  # → привет

См. также

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