我想根据一个 String 去创建文件夹,这个 String 可能包含特殊字符,并且是各种语言,我怎么去处理才能保证可行性和唯一性。
测试了下 Mac 上的:
使用 url encode 和 unicode 和话感觉有点长
1
magic3584 OP 微信的好像是加盐后的 md5
|
2
natsukage 2023-12-11 00:08:20 +08:00 via iPhone
你总得说下环境啊。。
比如 c#自己就有获取路径/文件夹名中不合法字符的方法 string invalidChars = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); string validName = Regex.Replace(name, "[" + Regex.Escape(invalidChars) + "]", ""); 这样可以简单地过滤掉所有不合法字符。 至于你想 throw ,改成下划线,重命名为 GUID 之类的就取决于你具体的业务逻辑了 |
3
magic3584 OP |
4
renmu 2023-12-11 00:32:36 +08:00 via Android
遍历不可用于命名的字符,然后换掉或者扔掉都可以
|
5
NoOneNoBody 2023-12-11 00:55:42 +08:00
关键是系统编码,以及系统定义的不可用于路径的字符,不同系统略有不同
utf-8 以及读取时也是 utf-8 应该问题不大,除非用了扩展字符集,例如汉字的古体或几乎难以见到的生僻字 如果是 GBK 或中欧字符编码就麻烦了,一般可以通过转码 latin-1 ,然后和系统定义的排除排除字符比较 例如 GBK 的“東”字 windows 好象是混合编码,很麻烦,一般需要 api 处理,还好各大语言都有比较完善的路径模块提供 |
6
zjyl1994 2023-12-11 10:12:55 +08:00
一般来说需要处理的都是空格变下划线,路径分隔符用到的斜杠也要转掉,windows 平台要额外处理冒号。似乎别的也就没什么了。如果想实现完美一些的话可以考虑查一下文件系统禁用的符号,ntfs/apfs/ext4 这几个的都看一看能覆盖不少用户范围了。
|