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