Почему Python3 использует обработчик ошибок файловой системы 'surrogatepass' на Windows? - PullRequest
1 голос
/ 25 марта 2020

Для Python 3 (3.8 и предыдущих версий обратно до 3.6) surrogatepass является обработчиком ошибок по умолчанию.

Это может вызвать проблемы для пользователей с путями к файлам, которые не соответствует этой кодировке.

Почему windows использует surrogatepass вместо surrogateescape, как другие платформы (Linux, macOS), которые могут обрабатывать эти байты. Например:

>>> import sys

>>> sys.getfilesystemencoding(), sys.getfilesystemencodeerrors()
('utf-8', 'surrogateescape')
>>>
>>> # This raises an error:
>>>
>>> b'C:\\Users\\me\\OneDrive\\\xe0\xcd\xa1\xca\xd2\xc3\\my.txt'.decode('utf-8', errors="surrogatepass")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe0 in position 24: invalid continuation byte

>>> # Compared to:

>>> b'C:\\Users\\me\\OneDrive\\\xe0\xcd\xa1\xca\xd2\xc3\\my.txt'.decode('utf-8', errors="surrogateescape")
'C:\\Users\\me\\OneDrive\\\udce0͡\udcca\udcd2\udcc3\\my.txt'

Обратите внимание, что, по предположению, я мог бы предположить, что это может быть необходимо, поскольку базовая файловая система NTFS использует UTF-16 вместо байтов с нулевым символом в конце, что требует некоторых ограничений для * 1020. * кодировка файловой системы отсутствует в Linux / macOS.

...