Java中的getUrlEncoder/getUrlDecoder填充问题

Java中的getUrlEncoder/getUrlDecoder填充问题,java,Java,我想在不填充的情况下将字符串编码和解码为base64 下面的代码正确吗 String test=Base64.getUrlEncoder().withoutPadding().encodeToString(测试); 字符串输出=Base64.getUrlDecoder().decode(测试); 不带填充的长度在解码时总是正确的?如果要对字符串变量进行编码和解码,可以使用以下代码: String s=“测试”; String test=Base64.getUrlEncoder().withou

我想在不填充的情况下将字符串编码和解码为base64

下面的代码正确吗

String test=Base64.getUrlEncoder().withoutPadding().encodeToString(测试);
字符串输出=Base64.getUrlDecoder().decode(测试);

不带填充的长度在解码时总是正确的?

如果要对字符串变量进行编码和解码,可以使用以下代码:

String s=“测试”;
String test=Base64.getUrlEncoder().withoutPadding().encodeToString(s.getBytes(StandardCharsets.UTF_8));//dGVzdA
字符串输出=新字符串(Base64.getUrlDecoder().decode(test),StandardCharsets.UTF_8);//测试
您可以在本文中获得有关Base64的更多信息。还有一个关于填充字符的好方法。我从JavaCodeGeeks那里找到了一个短消息:

默认情况下,如果编码的字符串长度未达到所需的长度,则使用“=”双相等运算符进行编码

通常,编码字符串应为3的倍数,否则将添加=字符

另一方面,在解码时,所有额外的填充字符将被丢弃

如果确实要解码,请使用WithOutpAdd()进行无填充编码

withoutPadding()方法有助于跳过输出的填充

许多开发人员认为,任何填充编码的字符串都不能解码回原始字符串

但是,这是错误的,api提供了解码的灵活性


如果要对字符串变量进行编码和解码,可以使用以下代码:

String s=“测试”;
String test=Base64.getUrlEncoder().withoutPadding().encodeToString(s.getBytes(StandardCharsets.UTF_8));//dGVzdA
字符串输出=新字符串(Base64.getUrlDecoder().decode(test),StandardCharsets.UTF_8);//测试
您可以在本文中获得有关Base64的更多信息。还有一个关于填充字符的好方法。我从JavaCodeGeeks那里找到了一个短消息:

默认情况下,如果编码的字符串长度未达到所需的长度,则使用“=”双相等运算符进行编码

通常,编码字符串应为3的倍数,否则将添加=字符

另一方面,在解码时,所有额外的填充字符将被丢弃

如果确实要解码,请使用WithOutpAdd()进行无填充编码

withoutPadding()方法有助于跳过输出的填充

许多开发人员认为,任何填充编码的字符串都不能解码回原始字符串

但是,这是错误的,api提供了解码的灵活性

报告说:

Base64填充字符
'='
被接受并解释为编码字节数据的结尾,但不是必需的

因此,任何不带填充编码的Base64序列都将被Base64解码器接受。

说明:

Base64填充字符
'='
被接受并解释为编码字节数据的结尾,但不是必需的


因此,Base64.Decoder将接受任何不带填充编码的Base64序列。

在没有字符集的字符串之间转换字节是不可跨平台移植的,它在Windows上执行的操作与在其他系统上不同。感谢您的提示。如果调用
getBytes
,将使用操作系统的默认字符集。在没有字符集的情况下,将字节转换为字符串或从字符串转换字节是不可跨平台移植的,它在Windows上执行的操作与在其他系统上不同。感谢您的提示。如果调用了
getBytes
,则将使用操作系统的默认字符集。