用户工具

站点工具


踩坑记录: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项目组