我正在尝试从WikiArt数据集中读取图像。但是,我无法加载某些包含非ascii字符的图像:
例如:
fã©lix-del-marle_nu-agenouill-sur-fond-bleu-1937.jpg'
尽管该文件存在于目录中。
我还比较了os.listdir()
和FileNotFoundError: No such file: '/wiki_art_paintings/rescaled_600px_max_side/Expressionism/fã©lix-del-marle_nu-agenouill-sur-fond-bleu-1937.jpg'
的输出字符串名称
通过做
'fã©lix-del-marle_nu-agenouill-sur-fond-bleu-1937.jpg' == 'fã©lix-del-marle_nu-agenouill-sur-fond-bleu-1937.jpg'
。输出为假
这里有什么问题
这两个字符串不一样。看:
似乎在“f”的周围有一个隐藏的字符。这似乎是个“a”
问题是因为在
Unicode
中,您可以使用单个字符或创建一些字符作为其他两个字符的组合,并且这两种情况在两个不同的位置。在一个位置,您将一些字符作为单个字符(使用单个代码),在另一个位置,您将字符作为其他两个字符(使用两个代码)的组合。当对两个字符串使用len()
时,您甚至可以看到差异。在您的示例中,一个版本有lenght53
,另一个版本有52
似乎您可以使用带有选项
NFC
、NFKC
、NFD
、NFKD
之一的unicodedata.normalize()
将一个名称转换为另一个名称。所以你必须测试哪一个适合你在一个方向上,您可能需要
NFC
或NFKC
,在另一个方向上,您可能需要NFD
或NFKD
您还可以使用
unidecode
创建没有本机字符的文本:fa(c)lix-del-marle_nu-agenouill-sur-fond-bleu-1937.jpg
,但这可能对您没有多大用处结果:
只有当我必须将MacOS文件传输到其他系统时,我才会遇到其他两个字符的组合
文件:unicodedata
Python街:Unicode
堆栈溢出:Normalizing Unicode
相关问题 更多 >
编程相关推荐