繁体   English   中英

如何替换文件名中的非法字符?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM