我的java应用程序使用base64编码,它在每76个字符后面添加一个新行(\n
)。我需要将这个编码的字符串放在属性文件中,换行符会破坏功能。
当我做encodedString.replaceAll("\n", "");
事情工作正常时,我只是想确保这是预期的,我不会引入隐藏的问题。
答案 0 :(得分:41)
对于许多无法处理长行的旧程序,必须将base64编码的字符串分成多行。用Java编写的程序通常可以处理长行,因为它们本身不需要进行内存管理。只要你的行短于6400万个字符就没有问题。
由于您不需要新行,如果可能,您根本不应该生成它们。
答案 1 :(得分:5)
某些Base64编码器将EOL字符(如CRLF('\ r \ n'))附加到编码字符串。您可以使用Base64.encodeBase64URLSafe删除它们:
使用base64算法的URL安全变体对二进制数据进行编码,但不会对输出进行分块。 url-safe变体发出 - 而_而不是+和/字符。注意:不添加填充。
答案 2 :(得分:1)
您只需要按以下方式使用Base64编码
Base64.encodeBase64String("Your data to encrypt in base64")
在行上方更改以下内容
Base64.encodeBase64String("Your data to encrypt in base64",Base64.NO_WRAP)
这将解决您的问题。
答案 3 :(得分:0)
encodedString.replaceAll("\n", "");
确实在 Java Mime 编码器中引入了一个“隐藏的问题”,我不得不解决它。
各行由 "\r\n" 分隔,而不仅仅是 "\n",因此您的替换将 "\r" 保留在某些地方,大多数程序都会忽略这些,但并非所有程序都会忽略这些内容。 例如,我在使用 GitHub API 时必须为文件生成包含 base42-mime 编码的 JSON,我只是在 encodingString.replaceAll("\n", "") 字符串前后添加 (") ...好吧..它没有工作,因为剩下的 \r...
答案 4 :(得分:-3)
这应该不是问题,因为许多解码器能够在没有换行符分隔符的情况下解码编码文本。最安全的选择是自己进行解码并验证它。