Проблема в том, что моя программа не может гарантировать, что эти каталоги и имена файлов на английском языке.Если в имени файла используются японские, китайские символы , то оно будет отображать некоторые символы, например '?'.
Проблема, очевидно, заключается в том, что "it" использует неправильный набор символов для отображенияимена файлов.Решение зависит от того, является ли "оно" вашей программой (через графический интерфейс), каким-либо другим приложением, командной оболочкой / эмулятором терминала или веб-браузером пользователя.Если бы вы могли предоставить больше информации, возможно, я мог бы предложить некоторые предложения.
Но превращение символов в подчеркивание, скорее всего, является плохим решением.Это может привести к конфликтам имен файлов, и эти китайские / японские символы и т. Д., Скорее всего, имеют значение для людей, создавших файлы.
Кстати, правильный термин для "английских" буквявляется латинским.
РЕДАКТИРОВАТЬ
Для вашего варианта использования файл PDF не следует хранить с именем файла, которое имеет какое-либо отношение к предоставленномуимя файла.Я предлагаю вам попытаться решить проблему, используя имя файла, состоящее из латинских цифр и букв, сгенерированных (скажем) currentTimeInMillis()
.Если это не помогает, тогда ваша настоящая проблема не имеет ничего общего с именами файлов.
РЕДАКТИРОВАТЬ 2
Вы спрашиваете об утверждении
if (fileName.startsWith("=?iso-8859"))
Кажется, это попытка отменить выбор имени файла в формате MIME encoded-word
;см. RFC 2047, раздел 2
Во-первых, я думаю, что код может быть ненужным.Javadoc не является конкретным, но я думаю, что Part.getFilename()
метод должен иметь дело с декодированием имени файла.
Во-вторых, если декодирование необходимо, то вы идете об этомНеправильный путь.Материал после кодировки не может просто рассматриваться как значение имени файла.Посмотрите на RFC.
В-третьих, , если вам нужно , вы должны использовать соответствующие MimeUtility
методы для декодирования токенов "word" ... как имя файла.
В-четвертых, ISO-8859-1 НЕ подходит для кодирования символов в наборах нелатинских символов.
Наконец, изучите необработанные заголовки сообщений электронной почты, которые вы пытаетесь декодировать.и найдите строку заголовка, которая начинается
Content-Disposition: attachment; filename=...
Если имя файла выглядит как "=? iso-8859-1? ...", и имя файла должно содержать символы японский / китайский / и т. д.,тогда проблема в клиенте (или что-то еще), который создал электронную почту.Набор символов должен быть "utf-8" или одним из других многобайтовых наборов символов.