从任何(不安全)字符串创建(sane / safe)文件名 [英] Create (sane/safe) filename from any (unsafe) string

查看:175
本文介绍了从任何(不安全)字符串创建(sane / safe)文件名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从一些随机的Unicode字符串(mich可能只包含任何东西)创建一个合理的/安全的文件名(即有点可读,没有奇怪的字符等)。

I want to create a sane/safe filename (i.e. somewhat readable, no "strange" characters, etc.) from some random Unicode string (mich might contain just anything).

(对我来说没关系,函数是Cocoa,ObjC,Python等)

(It doesn't matter for me wether the function is Cocoa, ObjC, Python, etc.)

当然,可能有无数的字符可能是奇怪的。因此,它不是一个解决方案,有一个黑名单,并添加越来越多的列表在这段时间。

Of course, there might be infinite many characters which might be strange. Thus, it is not really a solution to have a blacklist and to add more and more to that list over the time.

我可以有一个白名单。但是,我真的不知道如何定义它。 [a-zA-Z0-9。] 是一个开始,但我也想接受可以正常显示的unicode字符。

I could have a whitelist. However, I don't really know how to define it. [a-zA-Z0-9 .] is a start but I also want to accept unicode chars which can be displayed in a normal way.

推荐答案

Python:

"".join([c for c in filename if c.isalpha() or c.isdigit() or c==' ']).rstrip()

这样接受Unicode字符,但删除换行符等。

this accepts Unicode characters but removes line breaks, etc.

例如:

filename = u"ad\nbla'{-+\)(ç?"

提供:adblaç

编辑
str.isalnum()在一个步骤中使用字母数字 - 从下面的queueoverflow中注释danodonovan暗示保持包含一个点。

    keepcharacters = (' ','.','_')
    "".join(c for c in filename if c.isalnum() or c in keepcharacters).rstrip()

这篇关于从任何(不安全)字符串创建(sane / safe)文件名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆