我需要从用户输入的名称生成文件名。这些名称可以是任何语言。例如:
- “约翰·史密斯”
- 《高冈和子》
- "محمد سعيد بن عبد العزيز الفلسطيني"
这些是使用输入的值,所以我不能保证名称不包含在文件名中无效的字符。
用户将从他们的浏览器下载这些文件,因此我需要确保文件名在所有配置的所有操作系统上都有效。
我目前正在为英语国家这样做,只需使用简单的正则表达式删除所有非字母数字字符:
string = string.replaceAll("[^a-zA-Z0-9]", "");
string = string.replaceAll("\\s+", "_")
一些示例转换:
- “约翰史密斯”->“John_Smith.ext”
- “约翰·奥亨利”->“John_OHenry.ext”
- “约翰·范·史密斯三世”->“John_van_Smith_III.ext”
显然,这在国际上是行不通的。
我考虑过查找/生成在所有文件系统上无效的所有字符的黑名单,并从名称中删除这些字符。我一直找不到完整的清单。
如果可能的话,我更愿意使用公共库中的现有代码。我想这是一个已经解决的问题,但是我找不到在国际上有效的解决方案。
文件名是给下载文件的用户的,不是给我的。我不会存储这些文件。这些文件是由服务器根据数据库中数据的请求动态生成的。文件名是为了方便下载文件的人。