Java中URLEncoder.encode编码Base64字符串后,符号“+”变成了空格,如何避免这个问题
时间: 2024-03-16 18:41:56 浏览: 101
在 Java 中,URLEncoder.encode() 方法会将符号 "+" 编码成空格,这是因为在 URL 中,空格应该被编码成 "%20",而加号则不需要编码。如果将 Base64 字符串作为 URL 参数进行传输时,会遇到将加号编码成空格的问题。
解决方法是使用 Base64.getUrlEncoder().encodeToString() 方法进行编码,而不是使用 Base64.getEncoder().encodeToString() 方法。Base64.getUrlEncoder() 方法会使用 URL 和文件名安全的字符集,将符号 "+" 替换成 "-",将符号 "/" 替换成 "_",这样就可以避免将加号编码成空格的问题。
以下是示例代码:
```java
import java.util.Base64;
String original = "hello+world";
String encoded = Base64.getUrlEncoder().encodeToString(original.getBytes("UTF-8"));
String decoded = new String(Base64.getUrlDecoder().decode(encoded), "UTF-8");
System.out.println(decoded); // 输出:hello+world
```
在上面的代码中,使用了 Base64.getUrlEncoder() 方法进行编码,使用了 Base64.getUrlDecoder() 方法进行解码,这样就可以保证在编码和解码过程中不会将加号编码成空格。
阅读全文