【发布时间】:2014-09-30 10:10:52
【问题描述】:
我正在尝试创建一个包含文件夹的 zip,并且我必须针对任何非法字符清理文件夹名称。我做了一些谷歌搜索,从http://www.rgagnon.com/javadetails/java-0662.html找到了这个方法:
public static String sanitizeFilename(String name) {
return name.replaceAll("[\\\\/:*?\"<>|]", "-");
}
但是,经过测试,我得到了一些奇怪的结果。例如:
name = filename£/?e>"e
根据我的理解应该返回filename£--e--e。但相反,它返回filename-ú--e--e
为什么会这样?
请注意,我正在通过在 WinZip 中打开下载的 zip 文件并查看创建的文件夹名称来进行测试。我无法让井号出现。我也试过这个:
public static String sanitizeFilename(String name) {
name = name.replaceAll("[£]", "\u00A3");
return name.replaceAll("[\\\\/:*?\"<>|]", "-");
}
编辑:更多研究,我发现:http://illegalargumentexception.blogspot.co.uk/2009/04/i18n-unicode-at-windows-command-prompt.html 它似乎与语言环境、Windows 版本和编码因素有关。不知道如何在代码中克服这个问题。
【问题讨论】:
-
System.out.println("filename£/?e>\"e".replaceAll("[\\\\/:*?\"<>|]", "-"));为我工作。 -
你的实际输入是什么?
-
以上代码对我有用。你试过了吗?
-
作为旁注,如果你有两个文件名,像这样:
filename£??e>"e和filename£\\e>"e?当您解压缩文件时,它们会相互覆盖
标签: java regex filenames sanitization replaceall