как получить доступ к имени файла с не английским - PullRequest
0 голосов
/ 25 ноября 2010

при работе с неанглийским именем файла.

Проблема в том, что моя программа не может гарантировать, что эти каталоги и имена файлов написаны на английском языке, если в некоторых именах файлов, использующих японские и китайские символы, будет отображаться такой символ, как «?».

кто-нибудь может подсказать мне, что мне нужно сделать, чтобы получить доступ к неанглийскому имени файла

Ответы [ 2 ]

3 голосов
/ 25 ноября 2010

Проблема в том, что моя программа не может гарантировать, что эти каталоги и имена файлов на английском языке.Если в имени файла используются японские, китайские символы , то оно будет отображать некоторые символы, например '?'.

Проблема, очевидно, заключается в том, что "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" или одним из других многобайтовых наборов символов.

2 голосов
/ 25 ноября 2010

Java использует Unicode изначально - вам не нужно заменять специальные символы, поскольку Unicode не имеет специальных символов - каждая кодовая точка обрабатывается одинаковоВаш replaceSpChars() может быть виновником здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...