URL(Webview) 中如何使用特殊字符?

How use special characters in URL(Webview)?

我目前正在开发一个项目,该项目使用以下约定通过 webview 对用户进行身份验证: https://username:password@domain.com

当用户的密码包含特殊字符时会出现问题。我四处搜索,试图找出可能的解决方案。

我在收到身份验证请求时曾尝试使用 handler.proceed,但该方法未能取得任何成功。

网页视图加载URL方法只接受一个字符串,这个字符串是否自动URL编码?

我目前使用 String.format(https://%s:%s@domain.com , username , password) 来格式化字符串

我的问题是在密码中是否可以使用带有特殊字符的当前约定。

这似乎只是设备 运行 任何 OS 小于 4.4

的问题

编辑:澄清。

The web view loadURL method only takes a string, is this string automatically URL encoded?

没有。这会导致不希望的结果。以你自己的url为例:

https://username:password@domain.com

如果在加载之前对其进行 url 编码,它会变成如下内容:

https%3A%2F%2Fusername%3Apassword%40domain.com

显然,这没有多大意义。

I current use String.format(https://%s:%s@domain.com) to format the String. (...) is it possible to use the current convention with special characters in the password.

当然,只要确保您对实际的用户名和密码进行了 url 编码。例如,假设用户名是电子邮件地址:someone@somewhere.com,密码是包含 'special' 个字符的内容:@bc:d。您当前的字符串格式化程序会将您的 url 变成:

https://someone@somewhere.com:@bc:d@domain.com

现在,很明显这看起来不对。相反,url-对用户名和密码进行编码将其变成

https://someone%40somewhere.com:%40bc%3Ad@domain.com

这是完全合法的 url。编码后的用户名和密码can/will然后在接收端再次解码。

要对 Android 执行 url 编码,请查看 URLEncoded and Uri.encode()