Python 3.x 为什么Python3使用';代理类';Windows上的文件系统错误处理程序?
对于Python 3(3.8和3.6之前的版本),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’、‘代理景观’) >>> >>>#
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文件系统编码进行一些限制