Ruby 文件/文件夹名的字符筛选器无效?(红宝石)
我的脚本从网络上下载文件,然后以从同一web服务器获取的名称保存它们。我需要一个过滤器/删除Windows NTFS下文件/文件夹名的无效字符 我也很乐意使用多平台过滤器Ruby 文件/文件夹名的字符筛选器无效?(红宝石),ruby,filenames,Ruby,Filenames,我的脚本从网络上下载文件,然后以从同一web服务器获取的名称保存它们。我需要一个过滤器/删除Windows NTFS下文件/文件夹名的无效字符 我也很乐意使用多平台过滤器 注意:类似于htmlentities的东西会很好……我认为您最好的选择是文件名上的gsub。我知道您需要删除/替换的内容之一是:正如Geo所说,通过使用gsub,您可以轻松地将所有无效字符转换为有效字符。例如: file_names.map! do |f| f.gsub(/[<invalid characters&g
注意:类似于
htmlentities
的东西会很好……我认为您最好的选择是文件名上的gsub
。我知道您需要删除/替换的内容之一是:
正如Geo所说,通过使用gsub
,您可以轻松地将所有无效字符转换为有效字符。例如:
file_names.map! do |f|
f.gsub(/[<invalid characters>]/, '_')
end
它将所有无效字符替换为下划线。我不知道以后您打算如何使用这些文件,但最可靠的解决方案是将原始文件名保留在db表(或序列化哈希)中,并以您(或数据库)生成的唯一ID命名物理文件 PS这种方法的另一个优点是,您不必担心具有相同名称(或过滤到相同名称的不同名称)的文件
说明:替换除单词字符(字母、数字、下划线)和点以外的所有内容我猜人类需要查看这些文件。即使他删除了不需要的字符,文件名仍然可能对某人有意义,而ID可能不是。好吧,那么。例如,如果您只打算通过HTTP进一步提供这些文件,则ID是可以的。@liwp:这绝对是一个解决方案。我知道gsub,但不知道是否有任何宝石,甚至跨平台可用。通常情况下,他们中很少有人做任何事情;-)谢谢你的代码。可能是重复的
file_names.map! { |f| f.gsub(/[\x00\/\\:\*\?\"<>\|]/, '_') }
filename_string.gsub(/[^\w\.]/, '_')