Решение, данное Джеффом Поттсом , будет идеальным.Но у меня была ситуация, когда я использовал имя файла в другом проекте, где я не использовал jar, связанные с org.alfresco
Мне пришлось использовать все эти зависимости для простого декодирования файлов. Поэтому я использовал нативные методы java, которыеиспользует regex для анализа имени файла и его декодирования, что дало мне идеальное решение, которое было таким же, как использование
ISO9075.decode(test);
. Этот код можно использовать
public String decode_FileName(String fileName) {
System.out.println("fileName : " + fileName);
String decodedfileName = fileName;
String temp = "";
Matcher m = Pattern.compile("\\_x(.*?)\\_").matcher(decodedfileName); //rejex which matches _x0020_ kind of charectors
List<String> unicodeChars = new ArrayList<String>();
while (m.find()) {
unicodeChars.add(m.group(1));
}
for (int i = 0; i < unicodeChars.size(); i++) {
temp = unicodeChars.get(i);
if (isInteger(temp)) {
String replace_char = String.valueOf(((char) Integer.parseInt(String.valueOf(temp), 16)));//converting
decodedfileName = decodedfileName.replace("_x" + temp + "_", replace_char);
}
}
System.out.println("Decoded FileName :" + decodedfileName);
return decodedfileName;
}
И использоватьЭтот небольшой Java-утилита, чтобы знать, является целым числом
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch (NumberFormatException e) {
return false;
} catch (NullPointerException e) {
return false;
}
return true;
}
Так что приведенный выше код работает так просто:
Пример:
0028 Левая скобка U + 0028 Вы можете увидеть в ссылке https://en.wikipedia.org/wiki/List_of_Unicode_characters
String replace_char = String.valueOf(((char) Integer.parseInt(String.valueOf("0028"), 16)));
System.out.println(replace_char);
Этот код дает вывод: (
, который является левой скобкой
Это та логика, которую я использовал в моейJava-программа.
Приведенная выше программа выдаст результаты, аналогичные ISO9075.decode(test)
Output :
fileName : ABC1X_x0020_0400_x0020_0109-_x0028_1-2_x0029__v2.pdf
Decoded FileName :ABC1X 0400 0109-(1-2)_v2.pdf