Python Glossary English

Python 3.6+sysфункция

sys.getfilesystemencodeerrors()

кодировки

Возвращает обработчик ошибок для имён файлов: 'surrogateescape' на Linux и macOS, 'surrogatepass' на Windows.

Синтаксис

sys.getfilesystemencodeerrors()

На Linux имя файла — любые байты, не обязательно правильный UTF-8. Такие байты Python прячет в «суррогаты» вида \udcff, и os.listdir() не падает. Но строку с ними нельзя напечатать или записать в UTF-8 — возникнет UnicodeEncodeError «surrogates not allowed». Обратно в исходные байты её переводит os.fsencode() (или encode с тем же обработчиком 'surrogateescape'), а не простой encode('utf-8').

Примеры

import sys
print(sys.getfilesystemencodeerrors())  # → ? surrogateescape — на Windows surrogatepass
import os, sys
if sys.getfilesystemencodeerrors() == 'surrogateescape':
    name = os.fsdecode(b'report\xff.txt')
    print(ascii(name))  # → 'report\udcff.txt'
    try:
        name.encode('utf-8')
    except UnicodeEncodeError as e:
        print(e.reason)  # → surrogates not allowed
    print(os.fsencode(name))  # → b'report\xff.txt'

См. также

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