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