问题的根源在于编码和解码时使用的字符集不参与一致性检查。
当通过Base64.getEncoder().encodeToString(byte[] bytes)
将byte数组编码成字符串时,它使用UTF-8字符集。
而当使用Base64.getDecoder().decode(String encodedString)
方法解码时,默认字符集为平台默认字符集。
要消除这个问题,可以明确指定字符集,如下所示:
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64EncodingAndDecoding {
public static void main(String[] args) {
String originalString = "This is a test string";
byte[] originalBytes = originalString.getBytes(StandardCharsets.UTF_8);
// encode to string
String encodedString = Base64.getEncoder().encodeToString(originalBytes);
//decode back to byte[]
byte[] decodedBytes = Base64.getDecoder().decode(encodedString.getBytes(StandardCharsets.UTF_8));
String decodedString = new String(decodedBytes, StandardCharsets.UTF_8);
System.out.println("Original String: " + originalString);
System.out.println("Encoded String : " + encodedString);
System.out.println("Decoded Bytes : " + decodedBytes);
System.out.println("Decoded String : " + decodedString);
}
}
在上面的示例中,我们明确指定使用了UTF-8编码,以便在编码和解码过程中保持一致。这样,我们可以获得预期的结果并且避免了不必要的错误。