Uri Builder in android - '/' replaced by '%2F' and “:” is replaced by “%3A”

不打扰是莪最后的温柔 提交于 2019-12-20 10:25:50

问题


I want to build the following 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();

where

  • URL_SCHEME - https
  • host - 10.112.88.182:8443/Vehicle/services/
  • service - socialService
  • method - login

When this code runs I get the following URI -

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

/ is replaced by %2F and : is replaced by %3A


回答1:


That's how Uri.Builder works. It encodes non-safe URL characters with special meaning to their %xx hex values.

To prevent encoding URI parts that are already properly encoded, use the encoded versions of builder functions:

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

But since all your URL parts are already ready and don't need any further encoding, it's easier to just use a regular StringBuilder to concatenate the parts.




回答2:


Like laalto said, this is how Uri.Builder works but if you want to get the uri in a regular url form, like in your case: https://10.112.88.182:8443/Vehicle/services/socialService/login you can do:

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



回答3:


The solution is quite simple, simply use appendEncodedPath(), it will not encode your string, it just appends it as it is.



来源:https://stackoverflow.com/questions/18654538/uri-builder-in-android-replaced-by-2f-and-is-replaced-by-3a

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!