==== python对路径打印的编码处理和操作系统不一致的坑 踩于2024.2.19==== === 背景 === 在ubuntu下,用tar解压https://arxiv.org/src/1711.03378 这个论文的source压缩包(arXiv-1711.03378v1.tar.gz),解压后出现一个俄文的目录,但是在ubuntu下看到是乱码,同时python直接打印会报错 === 经过 === 报错示例代码如下 from pathlib import PurePosixPath, Path folder_path = "/nas2/arxiv/disk3/arxiv_debug" folder_path = Path(folder_path) file_list = folder_path.rglob("**/*.*") for file_path in file_list: print(file_path) 报错信息 UnicodeEncodeError: 'utf-8' codec can't encode characters in position 64-67: surrogates not allowed === 结果 === 发现是python在print时调用了str方法,会尝试把path转码成utf8编码,但是转码不成功则报错。而操作系统本身,当发现不是utf8编码时,直接就存储了原始字符串。所以一个简单的解决办法是使用repr方法,即: print(repr(file_path))