Я смотрю на проблему с приложением Java (v1.8.0_192-b12), которое использует Apache Camel (v2.22.1) для опроса файлов из папки. Все отлично работает с файлами, которые не имеют специальных символов в заголовке, но когда файл содержит символы, такие как Å , происходит странное поведение:
- верблюд выводит имя файла с?? - он не может напечатать фактический символ
- при тестировании размера файла, он возвращает 0
- , если мне удается обойти две вышеупомянутые точки, тогда
java.io.FileNotFoundException
выбрасывается
Мне удалось решить первые два пункта, затеняя один из классов Camel и заменив пакет java.io
на java.nio
, но все же не удалось полностью исправить поведение. Итак, на данный момент, похоже, что в java.io есть ошибка, которая была решена java.nio. Другими словами, файл извлекается, но после слов при попытке выполнить над ним какие-либо действия не удается (он больше не может найти его по имени). Исходный код - который возвращал файлы, которые после обработки потерпели неудачу после слов:
File directory = new File(fileName);
File[] dirFiles = directory.listFiles();
Рабочий код:
Stream<Path> stream = Files.list(Paths.get(fileName))
File[] dirFiles = stream.map(Path::toFile).toArray(File[]::new);
Папка с опросом через ftp и в Windows. Сервер опроса находится на Linux. Я также добавил iocharset=utf8
, когда монтировал привод в конфигурациях /etc/fstab
.
Я не нашел ни одной ссылки на известную проблему, которая напоминает то, с чем я сталкиваюсь.
Iтакже пытался продублировать среду в док-контейнере, чтобы иметь возможность проверить его локально, но, хотя у меня такая же настройка (та же ОС, java, файлы conf, сборка, файлы запуска и т. д.), я не смог воспроизвести его,Установка языкового стандарта UTF-8 и добавление параметра iocharset=utf8
при монтировании диска было достаточно.
Итак, вопрос в том, что является основной причиной такого поведения, когда файлы содержат специальные символы?
Дополнительная информация
Языковой стандарт установлен в UTF-8:
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
Javaпроцесс уже начинается с -Dsun.jnu.encoding = UTF-8 и -Dfile.encoding = UTF-8 параметров.
ls
Команда внутри папки с опросом выводит список файлов с их фактическим именем, поэтому на уровне операционной системы не возникает проблем с кодировкой