某些较旧的Base64编码器为编码字符串中的每76个字符添加回车符“ \ r”和/或换行符“ \ n”,称为“块”。原因是为了使编辑器不能处理更长的行。
问题是:base64的代码页中的“ \ r”或“ \ n”都不是基本字符之一;这样会使整个编码字符串对base64无效吗?
请注意,我并不是在问解码器是否会容忍\ r之类的“空白”字符。我问为什么将空白字符添加到base64字符串中就可以了,而那些空白字符显然不在base64代码页中。
感谢您对此的建议...
答案 0 :(得分:1)
根据Base64 javadoc,该Base64变体适用于MIME。
也就是说,必须知道使用范围。
幸运的是,Base64类可以完成所有操作。
基本
使用RFC 4648和RFC 2045的表1中指定的“ Base64字母”进行编码和解码操作。编码器不添加任何换行符(换行符)。解码器拒绝包含base64字母之外的字符的数据。
URL和文件名安全
使用RFC 4648表2中指定的“ URL和文件名安全的Base64字母”进行编码和解码。编码器不添加任何换行符(换行符)。解码器拒绝包含base64字母之外的字符的数据。
MIME
使用RFC 2045表1中指定的“ Base64字母”进行编码和解码操作。编码后的输出必须以不超过76个字符的行表示,并使用回车符'\ r'和紧跟换行符'\ n'作为行分隔符。没有行分隔符添加到编码的输出的末尾。在解码操作中将忽略在base64字母表中找不到的所有行分隔符或其他字符。
答案 1 :(得分:1)
阅读RFC 2045规范(即Joop帖子中的MIME部分)后,我意识到我之前的误解:RFC 2045 char表的代码页不是全部。
此外,该规范还明确规定了编码器除应提供代码页字符外,还应如何提供行分隔符,以及解码器应如何处理这些其他字符,这正是我所缺少的。这就是为什么这些行字符按规范有效的原因。