Python 3.x 为什么Python3使用';代理类';Windows上的文件系统错误处理程序?

Python 3.x 为什么Python3使用';代理类';Windows上的文件系统错误处理程序?,python-3.x,encoding,utf-8,filesystems,Python 3.x,Encoding,Utf 8,Filesystems,对于Python 3(3.8和3.6之前的版本),subrogatepass是默认的错误处理程序 对于具有与此编码不匹配的文件路径的用户,这可能会发生错误 为什么windows像其他平台(Linux、macOS)一样使用subrogateScape而不是subrogateScape,后者可以处理这些字节。例如: 导入系统 >>>sys.getfilesystemencoding(),sys.getfilesystemencodeerrors() (‘utf-8’、‘代理景观’) >>> >>>#

对于Python 3(3.8和3.6之前的版本),
subrogatepass
是默认的错误处理程序

对于具有与此编码不匹配的文件路径的用户,这可能会发生错误

为什么windows像其他平台(Linux、macOS)一样使用
subrogateScape
而不是
subrogateScape
,后者可以处理这些字节。例如:

导入系统 >>>sys.getfilesystemencoding(),sys.getfilesystemencodeerrors() (‘utf-8’、‘代理景观’) >>> >>>#这会引发一个错误: >>> >>>b'C:\\Users\\me\\OneDrive\\\xe0\xcd\xa1\xca\xd2\xc3\\my.txt'。解码('utf-8',errors=“代理过程”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 UnicodeDecodeError:“utf-8”编解码器无法解码位置24处的字节0xe0:无效的连续字节 >>>#与之相比: >>>b'C:\\Users\\me\\OneDrive\\\xe0\xcd\xa1\xca\xd2\xc3\\my.txt'。解码('utf-8',errors=“代理景观”) 'C:\\Users\\me\\OneDrive\\udce0\udcca\udcd2\udcc3\\my.txt'
注意,我猜想这可能是必要的,因为底层NTFS文件系统使用UTF-16而不是以null结尾的字节,需要对Linux/macOS上不存在的Python文件系统编码进行一些限制