怎么保证文件夹名字不含特殊字符和适配多语言? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rrubick

怎么保证文件夹名字不含特殊字符和适配多语言?

  •  
  •   rrubick 2023 年 12 月 10 日 1590 次点击
    这是一个创建于 866 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想根据一个 String 去创建文件夹,这个 String 可能包含特殊字符,并且是各种语言,我怎么去处理才能保证可行性和唯一性。

    测试了下 Mac 上的:

    1. 汉字 1 ,pwd 实际为:汉字\ 1
    2. /n/1, pwd 实际为::n:1

    使用 url encode 和 unicode 和话感觉有点长

    6 条回复    2023-12-11 10:12:55 +08:00
    rrubick
        1
    rrubick  
    OP
       2023 年 12 月 11 日
    微信的好像是加盐后的 md5
    natsukage
        2
    natsukage  
       2023 年 12 月 11 日 via iPhone
    你总得说下环境啊。。
    比如 c#自己就有获取路径/文件夹名中不合法字符的方法

    string invalidChars = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
    string validName = Regex.Replace(name, "[" + Regex.Escape(invalidChars) + "]", "");

    这样可以简单地过滤掉所有不合法字符。
    至于你想 throw ,改成下划线,重命名为 GUID 之类的就取决于你具体的业务逻辑了
    rrubick
        3
    rrubick  
    OP
       2023 年 12 月 11 日
    @natsukage #2
    辛苦大佬手机还要手撸代码
    我目前是想在手机上用命令创建文件夹,但是还是想了解下除了这个平台外,其它平台是如何做这块的
    renmu
        4
    renmu  
       2023 年 12 月 11 日 via Android
    遍历不可用于命名的字符,然后换掉或者扔掉都可以
    NoOneNoBody
        5
    NoOneNoBody  
       2023 年 12 月 11 日
    关键是系统编码,以及系统定义的不可用于路径的字符,不同系统略有不同
    utf-8 以及读取时也是 utf-8 应该问题不大,除非用了扩展字符集,例如汉字的古体或几乎难以见到的生僻字
    如果是 GBK 或中欧字符编码就麻烦了,一般可以通过转码 latin-1 ,然后和系统定义的排除排除字符比较
    例如 GBK 的“”字
    windows 好象是混合编码,很麻烦,一般需要 api 处理,还好各大语言都有比较完善的路径模块提供
    zjyl1994
        6
    zjyl1994  
       2023 年 12 月 11 日
    一般来说需要处理的都是空格变下划线,路径分隔符用到的斜杠也要转掉,windows 平台要额外处理冒号。似乎别的也就没什么了。如果想实现完美一些的话可以考虑查一下文件系统禁用的符号,ntfs/apfs/ext4 这几个的都看一看能覆盖不少用户范围了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1472 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 17:05 PVG 01:05 LAX 10:05 JFK 13:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86