我应该如何连接base64字符串以摆脱“=”字符?
我从servlet发送了一个数据字节流[]作为http响应,在客户端我想打开pdf查看器。但是,由于这些额外的角色,我无法查看它。
我尝试用+ =连接,使用concat连接,但是我仍然在每个子字符串的末尾都有=字符。
也许如果有一种方法可以在没有最后一个字符的情况下连接字符串。
答案 0 :(得分:1)
标准base-64编码将三个字节(3 * 8位)编码为4个字符(4 * 6位)。如果原始数据中的字节数不能被3整除,则如果余数为1则添加2 =
个字符,如果余数为2则添加1 =
。
现在,遗憾的是,如果第一个以填充字符=
结尾,则无法连接2个base-64编码的字符串 - 必须解码两者,连接二进制字符串*,然后重新编码,否则后者将不同步,第二部分的所有字节都将被错误解码。
[*]对第一部分进行重新编码并非绝对必要,但优化仍然不值得。
答案 1 :(得分:1)
我不确定我是否理解你的问题,但对我来说,听起来你想要连接多个Base64编码的字符串然后解码它们。无论=
- 字符如何,这都无法发挥作用。
例如,请查看以下Base64编码:
X20 -> IA==
X20 20 -> ICA=
但是连接IAIA
并对其进行解码会产生X 20 02 00
。
它无法工作的原因是Base64编码形式的每个字符可能代表来自多个未编码字节的部分,而每个未编码字节可能用多个Base64字符表示。
正如Antti Haapala正确指出的那样:你必须首先解码然后再连接输出,反之亦然。