Python os.listdir返回带有特殊字符的奇怪文件名字符串

Python os.listdir返回带有特殊字符的奇怪文件名字符串,python,special-characters,google-colaboratory,listdir,Python,Special Characters,Google Colaboratory,Listdir,假设我在路径中有以下文件,它位于连接到Python 3 Colab笔记本的Google驱动器中: (此处,#行表示输出) 每件事似乎都很好,但如果我写 'á.csv' in ls # False 但这应该是真的。但是,如果我重复上一个代码,但不是编写'á.csv',而是从print(ls)手动复制粘贴它,它将返回True 谢谢 ps:问题不完全在于这个文件名,而在于几个文件名包含特殊字符(即í,á,é,ó,ñ)我相信这是因为Unicode中的一些字符有重复。也就是说,虽然某些字符看起来相同,但

假设我在
路径
中有以下文件,它位于连接到Python 3 Colab笔记本的Google驱动器中:

(此处,#行表示输出)

每件事似乎都很好,但如果我写

'á.csv' in ls
# False
但这应该是真的。但是,如果我重复上一个代码,但不是编写'á.csv',而是从
print(ls)
手动复制粘贴它,它将返回True

谢谢


ps:问题不完全在于这个文件名,而在于几个文件名包含特殊字符(即í,á,é,ó,ñ)

我相信这是因为Unicode中的一些字符有重复。也就是说,虽然某些字符看起来相同,但它们可能是具有不同代码的不同字符。通过编写
á
尝试一次
。如果字节看起来不同,那是因为它们是看起来相同的不同字符。

您可以在比较它们之前规范化文件列表

从Unicode数据导入规范化
ls=[normalize('NFC',f)表示os.listdir(path)中的f]
#比较
在ls中规范化('NFC','á.csv')
#或者只是ls中的“á.csv”

你说得对!编写
'í.encode()
返回
\xc3\xad
并复制返回
i\xcc\x81
现在我如何修复它?两者都是utf-8格式,但其中一个编码为í,另一个编码为重音符号。同样在我的离线Python中,它也复制了这个问题(我不知道为什么之前它没有,但我会编辑我的帖子),所以可能是
listdir
的问题,只要没有冲突,你就可以从文件名中去掉所有重音。看看这是怎么回事。尽管出于安全原因,还是不需要最后一次正常化。
'á.csv' in ls
# False