Java使用URLEncoder.encode后使得符号“+”变成空格,如何保证解码后得到原文
时间: 2024-03-16 11:41:51 浏览: 21
在 Java 中,URLEncoder.encode() 方法会将符号 "+" 编码成空格,这是因为在 URL 中,空格应该被编码成 "%20",而加号则不需要编码。因此,如果需要保留加号,可以使用以下方法:
1. 在编码前将加号替换成其他字符(比如 "#"),然后在解码后再将其替换回来。
```java
String original = "hello+world";
String encoded = URLEncoder.encode(original.replace("+", "#"), "UTF-8");
String decoded = URLDecoder.decode(encoded, "UTF-8").replace("#", "+");
System.out.println(decoded); // 输出:hello+world
```
2. 使用 Base64 编码将原始字符串转换成字节数组,然后将字节数组转换成字符串时指定编码方式。
```java
import java.util.Base64;
String original = "hello+world";
String encoded = Base64.getEncoder().encodeToString(original.getBytes("UTF-8"));
String decoded = new String(Base64.getDecoder().decode(encoded), "UTF-8");
System.out.println(decoded); // 输出:hello+world
```
这两种方法都可以保证在编码和解码过程中不丢失加号。