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

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

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

 
```
new File(path).toURI()

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

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

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

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

 

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

 (function(w, d, n, s, t) {
 w[n] = w[n] || [];
 w[n].push(function() {
 Ya.Context.AdvManager.render({
 blockId: "R-A-248011-3",
 renderTo: "yandex\_rtb\_R-A-248011-3",
 async: true
 });
 });
 t = d.getElementsByTagName("script")[0];
 s = d.createElement("script");
 s.src = "//an.yandex.ru/system/context.js";
 s.async = true;
 t.parentNode.insertBefore(s, t);
 })(this, this.document, "yandexContextAsyncCallbacks");

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