簡體   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