Uri Builder в android – '/' заменен на «% 2F» и «:» заменен на «% 3A»

Я хочу создать следующий URI –

https://10.112.88.182:8443/Vehicle/services/socialService/login 

 Builder builder = new Builder(); builder.scheme(Constants.URL_SCHEME); builder.authority(host); builder.appendPath(service + "/" +method); return builder.build().toString(); 

где

  • URL_SCHEMEhttps
  • 10.112.88.182:8443/Vehicle/services/10.112.88.182:8443/Vehicle/services/
  • servicesocialService
  • methodlogin

Когда этот код работает, я получаю следующий URI –

 https://10.112.88.182%3A8443%2FVehicle%2Fservices%2F/socialService%2Flogin 

/ Заменяется на %2F и : заменяется на %3A

Вот как работает Uri.Builder . Он кодирует ненадежные URL-адреса со специальным значением в их шестнадцатеричные значения %xx .

Чтобы запретить кодирование частей URI, которые уже правильно закодированы, используйте encoded версии функций построителя:

 builder.encodedAuthority(host); builder.appendEncodedPath(service + "/" +method); 

Но поскольку все ваши части URL уже готовы и не нуждаются в дальнейшей кодировке, проще просто использовать обычный StringBuilder для объединения деталей.

Как сказал laalto, так работает Uri.Builder, но если вы хотите получить uri в обычной форме url, как в вашем случае: https://10.112.88.182:8443/Vehicle/services/socialService/login вы можете сделать :

 URL url = new URL(URLDecoder.decode(builder.build().toString(), "UTF-8"));