Я пытаюсь создать 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
Почему это так?
Обратите внимание, что я тестирую это, открывая загруженный zip-файл в WinZip и просматривая имя папки, которая создана. Я не могу получить знак фунта. Я также попытался это:
public static String sanitizeFilename(String name) {
name = name.replaceAll("[£]", "\u00A3");
return name.replaceAll("[\\\\/:*?\"<>|]", "-");
}
EDIT: Некоторые дополнительные исследования и я нашел это: http://illegalargumentexception.blogspot.co.uk/2009/04/i18n-unicode-at-windows-command-prompt.html Оказывается делать с Locale, версии окон и факторов кодирования. Не знаю, как я могу преодолеть это в коде.
'System.out.println ("? Имя_файла £/е> \" е ".replaceAll ("[\\\\/: *? \ "<> |]", "-")); 'работает для меня. –
Каков ваш фактический ввод? –
filename £ /? E> "e –