我的base64连接字符串有=字符。如何摆脱它们

时间:2015-03-16 14:45:09

标签: javascript string base64 concatenation concat

我应该如何连接base64字符串以摆脱“=”字符?

我从servlet发送了一个数据字节流[]作为http响应,在客户端我想打开pdf查看器。但是,由于这些额外的角色,我无法查看它。

我尝试用+ =连接,使用concat连接,但是我仍然在每个子字符串的末尾都有=字符。

也许如果有一种方法可以在没有最后一个字符的情况下连接字符串。

2 个答案:

答案 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正确指出的那样:你必须首先解码然后再连接输出,反之亦然。