Java URI не кодирует точки с запятой в пути. Лучшая практика здесь?

Я работаю над проектом, где локальный файл экспортируется через HTTP. Это включает в себя получение URI файла, релятивизацию его с использованием экспортированного пути, привязку его к URI экспорта и последующую обработку этого URL-адреса на принимающей стороне.

Обычно это работает нормально, но я столкнулся с проблемой, когда имя файла содержит точку с запятой. Я сузил его здесь:

new File(path).toURI()

Вышеуказанный метод корректно кодирует пробелы и т.п., но не точки с запятой (который должен быть закодирован в% 3B).

В конечном итоге вышеуказанный метод возвращает результат конструктора URI (протокол, хост, путь, фрагмент), который возвращает плохой URI.

Я мог бы вручную заменить все точки с запятой% 3B, но это не похоже на лучшее решение. Нет ли встроенного API для правильного кодирования пути?

Большое спасибо за любую помощь.

+2
источник поделиться
1 ответ

Точка с запятой - это абсолютно правильный символ в URI. Конечно, если принимающая сторона использует точку с запятой как специальный разделитель, отправителю необходимо ее избежать. Но это за пределами стандартной практики, поэтому вам придется избегать этого самостоятельно.

Но в Java-мире сервлет является стандартным, и он использует точку с запятой как специальные разделители. Я не знаю какой-либо утилиты, которая поможет вам там, поэтому вам все равно придется вручную сжимать точки с запятой.

+2
источник

Посмотрите другие вопросы по меткам или Задайте вопрос