android中的Uri Builder - '/'替换为'%2F',":"替换为"%3A"

Man*_*nik 20 url android uri

我想构建以下URI -

https://10.112.88.182:8443/Vehicle/services/socialService/login
Run Code Online (Sandbox Code Playgroud)

...

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

哪里

  • 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
Run Code Online (Sandbox Code Playgroud)

/由...替换%2F并:替换为%3A

laa*_*lto 36

这是Uri.Builder有效的.它对非安全URL字符进行编码,对其%xx十六进制值具有特殊含义.

要防止编码已正确编码的URI部分,请使用encoded构建器函数的版本:

builder.encodedAuthority(host);
builder.appendEncodedPath(service + "/" +method);
Run Code Online (Sandbox Code Playgroud)

但由于您的所有URL部分都已准备好并且不需要任何进一步的编码,因此使用常规StringBuilder连接部件更容易.


ing*_*nga 9

就像laalto说的那样,这就是Uri.Builder的工作方式,但是如果你想以常规网址形式获取uri,就像你的情况一样:https://10.112.88.182:8443/Vehicle/services/socialService/login 你可以这样做:

URL url = new URL(URLDecoder.decode(builder.build().toString(), "UTF-8"));
Run Code Online (Sandbox Code Playgroud)