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_SCHEME
- https
-
host
- 10.112.88.182:8443/Vehicle/services/
-
service
- socialService
-
method
- login
Когда этот код работает, я получаю следующий URI -
https://10.112.88.182%3A8443%2FVehicle%2Fservices%2F/socialService%2Flogin
/
заменяется на %2F
, а :
заменяется на %3A
Ответы
Ответ 1
Как работает Uri.Builder
. Он кодирует ненадежные URL-адреса со специальным значением в их шестнадцатеричные значения %xx
.
Чтобы запретить кодирование частей URI, которые уже правильно закодированы, используйте encoded
версии функций построителя:
builder.encodedAuthority(host);
builder.appendEncodedPath(service + "/" +method);
Но так как все ваши части URL уже готовы и не нуждаются в дальнейшей кодировке, проще просто использовать обычный StringBuilder
для объединения деталей.
Ответ 2
Как сказал 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"));
Ответ 3
Решение довольно просто, просто используйте appendEncodedPath()
, он не будет кодировать вашу строку, он просто добавляет его, как есть.