我想从一些随机的Unicode字符串中创建一个合理/安全的文件名(即,可读性强,没有“奇怪”字符等)(mich可能只包含任何内容)。
(对于我来说,函数是Cocoa,ObjC,Python等都是无关紧要的)
当然,可能有无数个可能很奇怪的字符。因此,拥有黑名单并随着时间的推移将越来越多的黑名单添加到黑名单并不是真正的解决方案。
我可以有一个白名单。但是,我真的不知道如何定义它。[a-zA-Z0-9 .]是一个开始,但我也想接受可以正常显示的unicode字符。
[a-zA-Z0-9 .]
蟒蛇:
"".join([c for c in filename if c.isalpha() or c.isdigit() or c==' ']).rstrip()
这接受Unicode字符,但删除换行符等。
例:
filename = u"ad\nbla'{-+\)(ç?"
给出: adblaç
adblaç
编辑 str.isalnum()一步执行字母数字。 –来自下面的queueoverflow的评论。danodonovan暗示要保留一个点。
keepcharacters = (' ','.','_') "".join(c for c in filename if c.isalnum() or c in keepcharacters).rstrip()