踩坑记录:20240219非utf8的路径名python打印报错
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))
踩坑记录/20240219非utf8的路径名python打印报错.txt · 最后更改: 2024/02/19 16:45 由 MNBVC项目组