[英]How do I replace illegal characters in a filename?
我正在尝试创建一个包含文件夹的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版本和编码有关因素。 不知道如何在代码中克服这个问题。
我认为这取决于您实际如何按照编码读取文件名。
因此, £
符号可能会损坏。
举一个不完全适合您的情况的示例,将UTF-8编码的£
读取为ISO拉丁1编码字符将返回£
。
确保文件的编码(即最常见的是ISO Latin 1 vs UTF-8),然后为Reader
使用适当的参数。
作为摘要,您可能需要考虑以下示例:
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(new File("yourTextFile")),
"[your file's encoding]"
)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.