标签 gb2312 下的文章

先扔参考文链接

windows直接上传带文件名带中文的文件到linux, linux 系统的字符编码默认是utf-8。
文件名的中文部分会显示乱码,且在把文件名 print 出来时 一定概率会触发 一个 UnicodeEncodeError 异常 提示 surrogates not allowed

def bad_filename(filename):
    return repr(filename)[1:-1]

try:
    print(filename)
except UnicodeEncodeError:
    print(bad_filename(filename))

对异常文件处理可以根据自己需要制定策略,例如 os.rename 过滤掉汉字部分,或 更彻底用 uuid.uuid1() 赋予新文件名。