如果密码包含 % 符号,Java 无法连接到 MySQL

Yev*_*hen 3 java mysql jdbc

这是我的连接网址:

jdbc:mysql://mydbhost:3306/mydatabase?user=username&password=%u16*!ypK@WrUQbr
Run Code Online (Sandbox Code Playgroud)

当我打电话

DriverManager.getConnection()
Run Code Online (Sandbox Code Playgroud)

使用当前 URL,我正在捕获异常:

ava.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "u1"
Run Code Online (Sandbox Code Playgroud)

如果连接 URL 不包含 % 一切正常。

我找到了有关此问题的一些信息,并建议进行下一次转换:

replaceAll("%(?![0-9a-fA-F]{2})", "%25")
Run Code Online (Sandbox Code Playgroud)

通过这种转换,我有错误:

Access denied for user(incorrect password)
Run Code Online (Sandbox Code Playgroud)

有人可以帮助正确转换网址吗?

Eri*_*ean 9

尝试使用以下字符串,其中密码中的所有保留字符都替换为适当的百分比编码值:

% : %25
* : %2A
! : %21
@ : %40

"jdbc:mysql://mydbhost:3306/mydatabase?user=username&password=%25u16%2A%21ypK%40WrUQbr" 
Run Code Online (Sandbox Code Playgroud)

有关百分比编码Wikipedia 的更多信息