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